Çok büyük ölçekli kurumsal düzeyde bir veritabanımız var. İş modelimizin bir parçası olarak, tüm web kullanıcıları web sunucularımıza her ay aynı saatte vuruyor ve bu da sql kutumuzu kırıyor. Trafik çok ağırdır ve şirket büyüdükçe ağırlaşmaya devam eder. sql proc optimizasyonu yapıldı ve donanım zaten çok yüksek bir seviyeye yükseltildi.
Şirketin büyümesini ve gelecekteki yükleri kaldırabilmemiz için veritabanını şimdi parçalamak istiyoruz.
Hangi verilerin parçalanması gerektiğine karar verdik. Çok kullanılan veritabanımızın bir alt kümesidir.
Ancak sorum, ortak / evrensel olan parçalanmamış verilerle ilgili. Bunun gibi verilere örnek olarak bir Envanter tablosu veya muhtemelen bir Çalışan tablosu, kullanıcı tablosu vb. Verilebilir.
Bu ortak / evrensel verileri işlemek için iki seçenek görüyorum:
1) tasarım 1 - Ortak / evrensel verileri harici bir veritabanına yerleştirin. Bütün yazılar burada olacak. Bu veriler daha sonra, her bir parçanın bu verileri okumasına ve bu verilere t-sql proc'larında iç birleşmesine izin veren her bir parçaya kopyalanacaktır.
2) tasarım 2 - Her parçaya tüm ortak / evrensel verilerin kendi kopyasını verin. Her bir parçanın bu tablolara yerel olarak yazmasına izin verin ve bu verileri diğer tüm parçacıklarda güncellemek / senkronize etmek için sql birleştirme çoğaltması kullanın.
tasarım # 1 ile ilgili endişeler
1) İşlem sorunları: Bir kırıkta veri yazmanız veya güncellemeniz ve daha sonra örneğin 1 depolanmış işlemde ortak / evrensel bir tablo yazmanız / güncellemeniz gereken bir durum varsa, artık bunu kolayca yapamayacaksınız. Veriler artık ayrı sql örnekleri ve veritabanlarında bulunmaktadır. Bu yazma işlemlerini ayrı bir veritabanında oldukları için bir işlemin içine yerleştirip paketleyemeyeceğinizi görmek için MS DTS'yi dahil etmeniz gerekebilir. Performans burada bir endişe kaynağıdır ve parçalanmış ve ortak verilere yazılan procslar için olası yeniden yazma işlemleri söz konusu olabilir.
2) referans bütünlüğünün kaybı. Veritabanları arası bilgi bütünlüğü yapmak mümkün değil.
3) Sistemin geniş alanlarını yeniden kodlamak, böylece yeni evrensel veritabanına ortak veri yazmayı bilmek, ancak kırıntılardan ortak verileri okumak.
4). artan veritabanı gezileri. Yukarıdaki # 1 gibi, parçalanmış verileri ve ortak verileri güncellemeniz gereken bir durumla karşılaştığınızda, veriler artık ayrı veritabanlarında olduğu için bunu gerçekleştirmek için birden fazla gidiş-dönüş gezisi yapacaksınız. Burada bazı ağ gecikmesi var ama bu kadar yukarıda 3 kadar endişelenmiyorum.
tasarım # 2 ile ilgili endişeler
Tasarım # 2'de her parça, tüm ortak / evrensel verilerin kendi örneğini alır. Bu, ortak verilere katılan veya güncellenen tüm kodların, bugün olduğu gibi çalışmaya / çalışmaya devam ettiği anlamına gelir. Geliştirme ekibinden çok az yeniden kodlama / yeniden yazma gerekir. Bununla birlikte, bu tasarım tüm verileri parçalarda senkronize tutmak için tamamen birleştirme çoğaltmasına bağlıdır. dbas son derece yeteneklidir ve birleştirme çoğaltmasının bu sorunu çözemeyebileceğinden ve çoğaltma başarısızlığını birleştirmekten çok endişe duyar, bu başarısızlıktan kurtarma büyük değildir ve bizi çok olumsuz etkileyebilir.
Birinin tasarım seçeneği # 2 ile gidip gitmediğini merak ediyorum. Görmediğim bir 3. veya 4. tasarım seçeneğine bakıp bakmadığımı da merak ediyorum.
şimdiden teşekkür ederim.