Adakah terdapat sebarang faedah untuk mewujudkan berbilang sambungan pangkalan data untuk sisipan SQL?
P粉585541766
P粉585541766 2024-03-30 08:39:46
0
1
368

Saya sedang menulis projek yang berkaitan dengan pemerolehan data secara besar-besaran. Pada masa ini saya menggunakan .NET Framework 4.8 dan pakej Mysql untuk memulakan sambungan dan memasukkan data ke dalam pelayan pangkalan data.

Saya akan memasukkan sekitar 400,000 baris/saat. Saya bimbang sambungan SQL mungkin menjadi halangan untuk program saya. Saya ingin tahu sama ada saya menggunakan sql untuk membuat sambungan berbilang benang dan menggunakan baris gilir pengguna untuk memasukkan data, adakah ia lebih pantas dan berbaloi (kebaikan dan keburukan)?

Dalam usus saya ia akan menjadi lebih pantas, tetapi saya tidak pasti berapa banyak prestasi yang akan diberikan dari segi overhed benang. Saya bukan pakar SQL, jadi alangkah baiknya jika seseorang dapat menerangkan kebaikan dan keburukan membuka berbilang sambungan ke SQL pada berbilang benang.

P粉585541766
P粉585541766

membalas semua(1)
P粉373596828

Khabar angin, pendapat, khabar angin, fakta, penanda aras berkaitan versi, beberapa pengalaman peribadi, dll...

Berbilang rangkaian boleh meningkatkan daya pengeluaran, tetapi terdapat had:

  • Had atas daya pengeluaran adalah kira-kira separuh daripada had teori. ("peratusan tertentu" anda") (Ini adalah penanda aras berdasarkan pakej berbilang benang; saya lupa namanya; itu sepuluh tahun yang lalu.)
  • Berbilang benang akan bersaing antara satu sama lain pada mutex dan mekanisme penguncian lain yang diperlukan.
  • Bermula sekitar 5.7, 64 utas ialah had berbilang benang untuk MySQL di luar ini, gerai pemprosesan atau penurunan. (Sumber: Banyak penanda aras Oracle membanggakan bahawa satu versi adalah jauh lebih baik daripada versi sebelumnya.) (Sementara itu, kependaman setiap benang adalah melalui bumbung.)
  • Jika boleh, setiap utas harus memproses data dalam kelompok.

Pemprosesan kelompok:

  • LOAD DATA 是一次从单个线程 INSERT 大量行的最快方法。但是,如果您包括将文件写入 LOAD kos, yang mungkin menjadikannya lebih perlahan daripada sisipan kelompok.
  • Batch INSERT mengikuti. Tetapi ia dihadkan pada "ratusan" baris apabila had tertentu atau "pulangan berkurangan" dicapai.
  • Sisipan kelompok adalah 10 kali lebih pantas daripada memasukkan satu baris setiap INSERT 查询插入一行的速度的 10 倍。因此,它(或 LOAD DATA pertanyaan. Oleh itu, ia (atau LOAD DATA) berbaloi untuk digunakan untuk pengingesan berkelajuan tinggi. (Sumber: Banyak berbeza ujian bermasa.)

Sumber data:

  • Sesetengah sumber data mesti menghantar hanya satu baris pada satu masa (cth. data penderia daripada kenderaan setiap N saat). Ini memerlukan beberapa lapisan tengah untuk memproses data secara kelompok.
  • Perbincangan tentang pengumpulan data: http://mysql.rjweb.org/doc.php /staging_table

Apakah yang berlaku selepas memuatkan data? Sudah tentu, ini bukan jadual tulis sahaja.

  • Penormalan berguna untuk mengecilkan jejak cakera paling baik dilakukan secara berkelompok. Lihat Penstandardan
  • PARTITIONing Jarang berguna, selain akhirnya memadamkan data lama. Lihat Partition
  • Jadual "fakta" yang besar sukar dicari; pertimbangkan untuk membina data ringkasan semasa anda menelan: Jadual ringkasan
  • Anda juga boleh melakukan pemprosesan di atas dan kemudian membuang data asal. Nampaknya anda mungkin mendapat satu terabait data setiap hari.
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan