Menyimpan ~ 3,5TB data dan memasukkan sekitar 1K / detik 24x7, dan juga membuat kueri pada tingkat yang tidak ditentukan, dimungkinkan dengan SQL Server, tetapi ada lebih banyak pertanyaan:
- persyaratan ketersediaan apa yang Anda miliki untuk ini? 99,999% uptime, atau apakah 95% cukup?
- persyaratan keandalan apa yang Anda miliki? Apakah melewatkan sisipan menghabiskan biaya $ 1 juta?
- persyaratan pemulihan apa yang Anda miliki? Jika Anda kehilangan data satu hari, apakah itu penting?
- persyaratan konsistensi apa yang Anda miliki? Apakah tulisan perlu dijamin akan terlihat pada bacaan berikutnya?
Jika Anda memerlukan semua persyaratan yang saya soroti, beban yang Anda usulkan akan menelan biaya jutaan dalam perangkat keras dan lisensi pada sistem relasional, sistem apa pun, apa pun tipuan yang Anda coba (sharding, partisi, dll.). Sistem nosql, menurut definisi mereka, tidak akan memenuhi semua persyaratan ini.
Jadi jelas Anda telah melonggarkan beberapa persyaratan ini. Ada panduan visual yang bagus 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 tabel tunggal berkerumun (GUID, waktu) kunci. Ya, akan terfragmentasi , tetapi apakah fragmentasi memengaruhi baca-maju dan baca-maju hanya diperlukan untuk pemindaian jarak yang signifikan. Karena Anda hanya meminta GUID dan rentang tanggal tertentu, fragmentasi tidak akan menjadi masalah. Ya, ini adalah kunci yang lebar, jadi halaman non-daun akan memiliki kepadatan kunci yang buruk. Ya, itu akan menyebabkan faktor pengisian yang buruk. Dan ya, pemisahan halaman mungkin terjadi. Terlepas dari masalah ini, mengingat persyaratan, masih merupakan pilihan kunci cluster terbaik.
- mempartisi tabel berdasarkan waktu sehingga Anda dapat menerapkan penghapusan catatan kadaluarsa secara efisien, melalui jendela geser otomatis . Tambahkan ini dengan pembuatan ulang partisi indeks online bulan lalu untuk menghilangkan faktor pengisian yang buruk dan fragmentasi yang diperkenalkan oleh pengelompokan GUID.
- aktifkan kompresi halaman. Karena grup kunci dikelompokkan berdasarkan GUID terlebih dahulu, semua catatan GUID akan bersebelahan, memberikan kompresi halaman peluang bagus bagi untuk menerapkan kompresi kamus.
- Anda memerlukan jalur IO cepat untuk file log. Anda tertarik pada throughput tinggi, bukan pada latensi rendah agar log dapat mengimbangi 1K sisipan / detik, jadi pengupasan adalah suatu keharusan.
Partisi dan kompresi halaman masing-masing memerlukan Enterprise Edition SQL Server, keduanya tidak akan berfungsi pada Edisi Standar dan keduanya cukup penting untuk memenuhi persyaratan.
Sebagai catatan tambahan, jika catatan berasal dari server web front-end, saya akan meletakkan Express di setiap server web dan alih-alih INSERT di bagian belakang, saya akan SEND
informasinya ke ujung belakang, menggunakan koneksi / transaksi lokal di Express yang terletak bersama dengan server web. Ini memberikan cerita ketersediaan yang jauh lebih baik untuk solusi tersebut.
Jadi begini cara saya melakukannya di SQL Server. Kabar baiknya adalah masalah yang akan Anda hadapi dipahami dengan baik dan solusinya diketahui. itu tidak berarti ini lebih baik dari apa yang bisa Anda capai dengan Cassandra, BigTable atau Dynamo. Saya akan membiarkan seseorang yang lebih berpengetahuan tentang hal-hal yang tidak ada-sql-ish untuk mendebat kasus mereka.
Perhatikan bahwa saya tidak pernah menyebutkan model pemrograman, dukungan .Net, dan semacamnya. Sejujurnya saya pikir mereka tidak relevan dalam penerapan besar. Mereka membuat perbedaan besar dalam proses pengembangan, tetapi setelah diterapkan tidak masalah seberapa cepat pengembangannya, jika overhead ORM mematikan kinerja :)