Kami memiliki basis data tingkat perusahaan berskala sangat besar. Sebagai bagian dari model bisnis kami, semua pengguna web menekan server web kami pada waktu yang sama setiap bulan yang pada gilirannya memalu kotak sql kami. Lalu lintas sangat padat dan terus bertambah semakin besar semakin besar perusahaan tumbuh. sql optimasi proc telah dilakukan dan perangkat keras telah ditingkatkan ke tingkat yang sangat tinggi.
Kami sedang mencari basis data sekarang untuk memastikan bahwa kami dapat menangani pertumbuhan perusahaan dan beban masa depan.
Kami telah memutuskan data apa yang harus dibagikan. Ini adalah bagian dari database kami yang sangat dimanfaatkan.
Namun, pertanyaan saya adalah mengenai data non-sharded yang umum / universal. Contoh data seperti ini dapat berupa tabel Persediaan misalnya atau mungkin tabel Karyawan, tabel pengguna dll.
Saya melihat dua opsi untuk menangani data umum / universal ini:
1) desain 1 - Tempatkan data umum / universal dalam basis data eksternal. Semua tulisan akan muncul di sini. Data ini kemudian akan direplikasi ke setiap beling yang memungkinkan setiap beling untuk membaca data ini dan bergabung dengan data ini dalam procs t-sql.
2) desain 2 - Berikan masing-masing pecahan salinannya sendiri dari semua data umum / universal. Biarkan setiap beling menulis secara lokal ke tabel ini dan menggunakan replikasi gabungan sql untuk memperbarui / menyinkronkan data ini pada semua pecahan lainnya.
kekhawatiran tentang desain # 1
1) Masalah transaksional: Jika Anda memiliki situasi di mana Anda harus menulis atau memperbarui data dalam beling dan kemudian menulis / memperbarui tabel umum / universal dalam 1 proc yang disimpan misalnya, Anda tidak akan lagi dapat melakukan ini dengan mudah. Data sekarang ada pada instans dan database sql terpisah. Anda mungkin perlu melibatkan MS DTS untuk melihat apakah Anda dapat membungkus tulisan-tulisan ini menjadi sebuah transaksi karena mereka berada dalam database yang terpisah. Kinerja menjadi perhatian di sini dan kemungkinan penulisan ulang mungkin dilibatkan untuk procs yang menulis ke data yang terbuang dan umum.
2) hilangnya integritas referensial. Tidak mungkin untuk melakukan integritas referensial pangkalan data.
3) Pengodean ulang area besar dari sistem sehingga ia tahu untuk menulis data umum ke database universal baru tetapi membaca data umum dari pecahan.
4). peningkatan perjalanan basis data. Seperti # 1 di atas, ketika Anda mengalami situasi di mana Anda harus memperbarui data yang terbengkalai dan data umum, Anda akan melakukan beberapa perjalanan bolak-balik untuk mencapai hal ini karena data sekarang dalam database terpisah. Beberapa latensi jaringan di sini tetapi saya tidak khawatir tentang masalah ini sebanyak 3 di atas.
kekhawatiran tentang desain # 2
Dalam desain # 2 setiap pecahan mendapatkan instance sendiri dari semua data umum / universal. Ini berarti bahwa semua kode yang bergabung atau memperbarui data umum terus bekerja / berjalan seperti sekarang. Sangat sedikit pengodean ulang / penulisan ulang yang diperlukan dari tim pengembangan. Namun, desain ini sepenuhnya bergantung pada replikasi gabungan untuk menjaga data tetap sinkron di semua pecahan. dbas sangat terampil dan sangat prihatin bahwa menggabungkan replikasi mungkin tidak dapat menangani ini dan harus menggabungkan replikasi gagal, bahwa pemulihan dari kegagalan ini tidak besar dan dapat berdampak sangat negatif terhadap kami.
Saya ingin tahu apakah ada yang menggunakan opsi desain # 2. Saya juga ingin tahu apakah saya menghadap ke opsi desain ke-3 atau ke-4 yang tidak saya lihat.
Terima kasih sebelumnya.