Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Penyimpanan data terbaik untuk miliaran baris

Menyimpan ~3.5TB data dan menyisipkan sekitar 1K/dtk 24x7, dan juga kueri pada kecepatan yang tidak ditentukan, dimungkinkan dengan SQL Server, tetapi ada lebih banyak pertanyaan:

  • apa persyaratan ketersediaan yang Anda miliki untuk ini? 99,999% uptime, atau 95% cukup?
  • persyaratan keandalan apa yang Anda miliki? Apakah kehilangan sisipan membuat Anda membayar $1 juta?
  • persyaratan pemulihan apa yang Anda miliki? Jika Anda kehilangan satu hari data, apakah itu penting?
  • persyaratan konsistensi apa yang Anda miliki? Apakah tulisan perlu dijamin akan terlihat pada pembacaan berikutnya?

Jika Anda memerlukan semua persyaratan yang saya soroti, beban yang Anda usulkan akan menghabiskan biaya jutaan dalam perangkat keras dan lisensi pada sistem relasional, sistem apa pun, apa pun gimmicks yang Anda coba (sharding, partisi, dll). Sistem nosql, menurut definisinya, tidak akan memenuhi semua persyaratan ini.

Jadi jelas Anda sudah melonggarkan beberapa persyaratan ini. Ada panduan visual yang bagus yang membandingkan penawaran nosql berdasarkan paradigma 'pilih 2 dari 3' di Panduan Visual untuk Sistem NoSQL:

Setelah pembaruan komentar OP

Dengan SQL Server, ini akan menjadi implementasi langsung:

  • satu kunci tabel berkerumun (GUID, waktu). Ya, akan menjadi terfragmentasi, tetapi apakah fragmentasi memengaruhi pembacaan ke depan dan pembacaan ke depan hanya diperlukan untuk pemindaian rentang yang signifikan. Karena Anda hanya menanyakan GUID dan rentang tanggal tertentu, fragmentasi tidak akan menjadi masalah. Ya, adalah kunci lebar, jadi halaman non-daun akan memiliki kepadatan kunci yang buruk. Ya, itu akan menyebabkan faktor pengisian yang buruk. Dan ya, pemisahan halaman dapat terjadi. Terlepas dari masalah ini, mengingat persyaratan, masih merupakan pilihan kunci berkerumun terbaik.
  • partisi tabel berdasarkan waktu sehingga Anda dapat menerapkan penghapusan catatan yang kedaluwarsa secara efisien, melalui jendela geser otomatis. Tingkatkan ini dengan pembangunan kembali partisi indeks online bulan lalu untuk menghilangkan faktor pengisian yang buruk dan fragmentasi yang diperkenalkan oleh pengelompokan GUID.
  • mengaktifkan kompresi halaman. Karena pengelompokan kunci dikelompokkan berdasarkan GUID terlebih dahulu, semua catatan GUID akan berada di samping satu sama lain, memberikan kompresi halaman kesempatan yang baik untuk menerapkan kompresi kamus.
  • Anda memerlukan jalur IO cepat untuk file log. Anda tertarik pada throughput tinggi, bukan pada latensi rendah agar log dapat mengikuti 1K sisipan/dtk, jadi stripping adalah suatu keharusan.

Partisi dan kompresi halaman masing-masing memerlukan SQL Server Edisi Perusahaan, keduanya tidak akan berfungsi pada Edisi Standar dan keduanya cukup penting untuk memenuhi persyaratan.

Sebagai catatan tambahan, jika catatan berasal dari peternakan server Web front-end, saya akan menempatkan Express di setiap server web dan alih-alih INSERT di bagian belakang, saya akan SEND info ke bagian belakang, menggunakan koneksi/transaksi lokal di Express yang terletak bersama dengan server web. Ini memberikan cerita ketersediaan yang jauh lebih baik untuk solusi.

Jadi ini adalah bagaimana saya akan melakukannya di SQL Server. Kabar baiknya adalah bahwa masalah yang akan Anda hadapi dipahami dengan baik dan solusi diketahui. itu tidak berarti ini lebih baik daripada yang dapat Anda capai dengan Cassandra, BigTable atau Dynamo. Saya akan memberi tahu seseorang yang lebih berpengetahuan tentang hal-hal yang tidak memerlukan sql untuk memperdebatkan kasus mereka.

Perhatikan bahwa saya tidak pernah menyebutkan model pemrograman, dukungan .Net dan semacamnya. Sejujurnya saya pikir mereka tidak relevan dalam penyebaran besar. Mereka membuat perbedaan besar dalam proses pengembangan, tetapi setelah diterapkan, tidak masalah seberapa cepat pengembangannya, jika overhead ORM mematikan kinerja :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan Daftar Kolom yang Dihitung di SQL Server

  2. Bagaimana cara mengambil data dari database SQL Server di C#?

  3. Sertakan bulan yang hilang dalam kueri Grup Berdasarkan

  4. Cara Mengenkripsi Prosedur Tersimpan di SQL Server

  5. Bagaimana cara mengatur batas waktu skrip SQL Server dari dalam skrip?