Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menyuntik data dummy mudah pada skala besar dalam MySQL

Bagaimana untuk menyuntik data dummy mudah pada skala besar dalam MySQL

PHPz
PHPzasal
2024-07-18 08:24:19901semak imbas

How to inject simple dummy data at a large scale in MySQL

pengenalan

Pernah mendapati diri anda berada dalam situasi di mana anda memerlukan sejumlah besar data tiruan untuk ujian, tetapi tidak mahu menghabiskan berjam-jam menulis skrip atau memasukkan rekod secara manual? Atau mungkin anda ingin tahu tentang cara memanfaatkan ciri baharu dalam MySQL 8.0 untuk menyelaraskan tugas pangkalan data anda? Baiklah, anda sedang mencuba! Dalam siaran ini, kami akan meneroka cara menggunakan Ungkapan Jadual Biasa (CTE) untuk menjana dan memasukkan sejumlah besar data palsu ke dalam pangkalan data MySQL anda dengan mudah.

Bayangkan anda perlu mengisi jadual dengan sejuta nilai cincang untuk ujian beban atau penanda aras prestasi. Bunyi seperti mimpi ngeri, bukan? Tidak lagi! Dengan kemunculan CTE dalam MySQL 8.0, anda boleh mencapai ini dalam masa beberapa saat. Mari kita mendalami cara ini berfungsi dan cara anda boleh menggunakan ciri berkuasa ini untuk memudahkan keperluan penjanaan data anda.

TL; DR

Ungkapan Jadual Biasa (CTE), ciri baharu yang ditambah dalam MySQL 8.0, boleh digunakan untuk memasukkan sejumlah besar data tiruan ringkas dengan mudah. Contohnya, jika anda ingin memasukkan 1 juta data palsu ke dalam jadual yang dipanggil cincangan yang menyimpan nilai cincang, anda boleh mencapainya dengan langkah berikut:

Definisi Jadual

Mula-mula, buat jadual:

CREATE TABLE hashes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  hash CHAR(64)
);

Perlaksanaan Pertanyaan

Tetapkan pembolehubah sesi untuk membenarkan kedalaman rekursi yang lebih tinggi:

SET SESSION cte_max_recursion_depth = 1000000;

Kemudian, laksanakan CTE untuk memasukkan 1 juta baris:

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 1000000
)
SELECT SHA2(n, 256) FROM cte;

Kaedah ini memanfaatkan ungkapan jadual biasa rekursif untuk menjana data tiruan.

Memahami CTE

Ungkapan Jadual Biasa (CTE) ialah set hasil sementara yang dinamakan yang boleh dirujuk dalam satu pernyataan beberapa kali. CTE amat berguna untuk memudahkan pertanyaan kompleks dan meningkatkan kebolehbacaan.

Pecahan Sintaks

Menetapkan Kedalaman Rekursi

SET SESSION cte_max_recursion_depth = 1000000;

Pembolehubah sistem cte_max_recursion_depth menetapkan had atas untuk rekursi. Secara lalai, ia adalah 1000, jadi untuk mengulangi lagi, anda perlu melaraskannya. Di sini, kami tetapkan kepada 1 juta.

Pertanyaan CTE

INSERT INTO hashes(hash)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 1000000
)
SELECT SHA2(n, 256) FROM cte;

Mari kita pecahkan pertanyaan ini:

  • DENGAN REKURSIF cte (n): Ini memulakan definisi CTE. cte ialah nama set hasil sementara dan n ialah lajur.

  • PILIH 1: Ini ialah bahagian bukan rekursif CTE, berfungsi sebagai titik permulaan (nilai awal).

  • UNION SEMUA PILIH n + 1 DARI cte MANA n < 1000000: Ini ialah bahagian rekursif, yang menambah nilai n sebanyak 1 sehingga mencapai 1,000,000.

  • PILIH SHA2(n, 256) DARI cte: Bahagian akhir pertanyaan ini memilih cincang SHA-256 bagi setiap nilai n, menjana data tiruan untuk sisipan.

Bagaimana Ia Berfungsi

CTE secara rekursif menjana nombor daripada 1 hingga 1,000,000. Untuk setiap nombor, ia mengira cincang SHA-256 dan memasukkannya ke dalam jadual cincang. Pendekatan ini cekap dan memanfaatkan keupayaan rekursif MySQL untuk mengendalikan volum data yang besar dengan lancar.

Kelajuan Pemprosesan

Persekitaran Pengesahan

Untuk memahami kesan ciri ini, saya menggunakan ruang kerja Gitpod Enterprise, memanfaatkan persekitaran yang berkuasa dan tidak kekal untuk mengelakkan kerumitan persediaan dan pemasangan. Berikut ialah imbasan pada persediaan:

  • Mesin: Gitpod Enterprise XXRuang kerja yang besar
  • OS: Ubuntu 22.04.4 LTS (Jammy Jellyfish)
  • Pebekalan: Docker versi 26.0.1
  • Versi MySQL: Imej rasmi MySQL 8.0 Docker

Keputusan

Untuk 1 juta baris, masa pelaksanaan pertanyaan adalah lebih kurang 4.46 saat:

mysql> INSERT INTO hashes(hash)
    -> WITH RECURSIVE cte (n) AS
    -> (
    ->   SELECT 1
    ->   UNION ALL
    ->   SELECT n + 1 FROM cte WHERE n < 1000000
    -> )
    -> SELECT SHA2(n, 256) FROM cte;
Query OK, 1000000 rows affected (4.43 sec)
Records: 1000000  Duplicates: 0  Warnings: 0

Metrik Prestasi

Number of Rows Execution Time
1,000 0.03 sec
10,000 0.07 sec
100,000 0.42 sec
1,000,000 4.43 sec
10,000,000 48.53 sec

Kesimpulan

Menggunakan CTE dalam MySQL 8.0 ialah penukar permainan untuk menjana sejumlah besar data palsu dengan cepat. Ia amat berguna untuk ujian beban dan penanda aras prestasi. Dengan hanya beberapa baris kod, anda boleh mengisi jadual anda dengan mudah dan kemudian kembali ke bahagian penting projek anda yang lain.

Jangan teragak-agak untuk bermain-main dengan strategi penjanaan data yang berbeza dan kedalaman rekursi untuk melihat perkara yang paling sesuai untuk anda. Untuk mendapatkan lebih banyak petua dan pandangan tentang keselamatan dan analisis log, ikuti saya di Twitter @Siddhant_K_code dan kekal kemas kini dengan kandungan teknologi terkini & terperinci seperti ini. Selamat mengekod!

Atas ialah kandungan terperinci Bagaimana untuk menyuntik data dummy mudah pada skala besar dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn