Setelah beberapa tahun berdiam di ruang "NoSQL", sekarang saya memiliki masalah yang cukup "relasional". Hari ini saya melihat toko data dengan mata yang sangat berbeda dari sebelumnya. Hal-hal seperti Riak telah memanjakanku sedemikian rupa sehingga aku tidak bisa lagi mentolerir satu titik kegagalan, "turun untuk pemeliharaan" dll. Tentu saja, (atau aku harap), aku tidak kehilangan kewarasanku sama sekali. Ini adalah proyek pribadi yang belum (atau belum) memiliki persyaratan sangat tinggi.
Sebagian besar solusi sharding tidak memberikan apa yang saya inginkan (setidaknya sekilas), mungkin karena masalah saya cukup "mudah" untuk dipecahkan. Setidaknya pada level konseptual (mengabaikan batasan yang dibawa RDBM sendiri ke meja).
Saya memiliki sejumlah kecil data "bersama", yang dapat diduplikasi secara bebas. Itu tidak memiliki persyaratan konsistensi keras. Ini dapat disimpan dalam database seperti dinamo dan akan berskala tak terbatas. Tapi saya masih ingin pergi dengan satu basis data jika memungkinkan.
Saya punya banyak data "per pengguna". Yaitu - banyak pengguna, dengan setiap pengguna memiliki data dengan ukuran yang benar-benar masuk akal, sangat cocok untuk disimpan pada satu simpul PostgreSQL. Kita berbicara tentang maksimum 10s dari ribuan rekaman.
Saya tidak pernah perlu query lintas-pengguna dan saya tidak perlu atomisitas lintas-pengguna.
Ini kedengarannya sangat mudah untuk dicapai. Setidaknya ketika saya melihatnya dengan "mata NoSQL" saya.
Inilah ide-ide pemula saya yang naif:
Pada tingkat yang paling ekstrem, saya hanya bisa membuat serial seluruh pengguna sebagai Kunci / Nilai tunggal dalam Riak. Tentu saja, de / serialisasi data beberapa megabyte yang konstan akan lambat dan itu sebabnya saya mempertimbangkan untuk menggunakan PostgreSQL. Banyak Riak K / V tidak dapat digunakan, karena saya membutuhkan atomicity / transaksi dalam data masing-masing pengguna.
Saya bisa menggunakan database SQLite per pengguna, dan menggunakan sesuatu seperti GlusterFS untuk redundansi / ketersediaan. Ini mungkin solusi yang akan saya pilih jika saya tidak dapat menemukan sesuatu yang sama baiknya menggunakan PostgreSQL. Kelebihan: Dapat menurunkan / menaikkan skala dengan sangat baik; Cons: Saya lebih suka memiliki jenis dan ketegasan PostgreSQL atas SQLite
Jadi, apa yang idealnya saya minta dari solusi sharding PostgreSQL:
- Secara otomatis menyimpan beberapa salinan data setiap pengguna di sekitar (pada mesin yang berbeda). Dapat secara dinamis beralih node master per pengguna / shard (jika master sebelumnya turun).
- Mampu secara dinamis naik / turun skala, dengan menambahkan / menghapus node server. Seperti yang Riak mampu lakukan.
- Tidak memerlukan aplikasi saya untuk mengetahui node mana yang harus diajak bicara dan kapan.