Bayangkan aliran data yang "meledak", yaitu bisa membuat 10.000 peristiwa tiba dengan sangat cepat, diikuti tanpa apa pun selama satu menit.
Nasihat ahli Anda: Bagaimana saya bisa menulis kode penyisipan C # untuk SQL Server, sedemikian sehingga ada jaminan bahwa SQL segera menyimpan semuanya dalam RAM-nya sendiri, tanpa memblokir aplikasi saya lebih dari yang diperlukan untuk memasukkan data ke dalam RAM yang dikatakan? Untuk mencapai ini, apakah Anda tahu ada pola untuk pengaturan SQL server itu sendiri, atau pola untuk mengatur tabel SQL individu yang saya tulis?
Tentu saja, saya bisa melakukan versi saya sendiri, yang melibatkan membangun antrian saya sendiri di RAM - tetapi saya tidak ingin menemukan kembali Paleolithic Stone Axe, jadi untuk berbicara.
sumber
Jawaban:
Sudahkah Anda mencoba hanya menulis dan melihat apa yang terjadi? Apakah Anda memiliki hambatan yang diketahui?
Jika Anda perlu mencegah aplikasi Anda diblokir, maka Anda salah satu caranya adalah dengan mengantri tulisan untuk menunda panggilan basis data. Namun, saya berharap antrian untuk menghapus dalam satu atau 2 detik: jadi apakah Anda perlu antrian jika ini OK?
Atau Anda bisa menggulung ke meja panggung dan kemudian menyiramnya nanti? Kami menggunakan teknik ini untuk menangani penulisan berkelanjutan jutaan baris baru per menit (kami benar-benar menggunakan DB pementasan dengan pemulihan Sederhana): tetapi kami tidak menerapkannya sampai kami memiliki pengalaman hanya menulis baris.
Catatan: Setiap penulisan dalam SQL Server akan dilakukan sebagai bagian dari protokol Write Ahead Logging (WAL). Ini berlaku untuk entri t-log untuk penulisan itu.
Halaman data dengan baris akan pergi ke disk di beberapa titik (berdasarkan waktu, penggunaan, tekanan memori dll) tetapi umumnya data Anda akan tetap dalam memori. Ini disebut "Checkpointing" dan tidak mengusir data dari memori, hanya menghapus perubahan (diedit 24 Nov 2011)
Edit:
Untuk seluruh pertimbangan, berdasarkan paragraf terakhir di atas, pindahkan LDF Anda untuk basis data ini ke satu set disk khusus untuk kinerja lebih tinggi. Ditto database pementasan (masing-masing untuk MDF / LDF). Sangat umum untuk memiliki selusin atau 3 volume berbeda (melalui SAN biasanya) untuk server database Anda
sumber
Kecuali jika saya melewatkan sesuatu, ini akan melanggar persyaratan Durability dari ACID ( http://en.wikipedia.org/wiki/ACID ). Artinya, jika aplikasi Anda "menulis" data ke RAM dan kemudian server crash, data Anda hilang.
Jadi, apa yang Anda cari adalah sistem non-basis data yang berfungsi sebagai antrian untuk penyimpanan akhirnya ke dalam basis data atau sistem basis data yang cukup cepat untuk apa yang Anda lakukan. Saya sarankan mencoba yang terakhir terlebih dahulu dan melihat apakah itu cukup; jangan pinjam masalah.
sumber
Saya pernah menggunakan Dataset untuk ini. Saya memasukkan baris ke dataset saat mereka tiba, dan ada utas lain yang menyiram baris setiap 2 detik ke database. Anda juga dapat menggunakan dokumen xml untuk melakukan cachin, dan kemudian meneruskan xml ke database dalam satu panggilan, ini mungkin bahkan lebih baik.
Salam
Piotr
sumber