Kırma ile gotcha uygulama sorgulamak için hangi kırığı bilmek zorunda olmasıdır. Genellikle, bu müşteri gibi bir şey üzerinde parçalanarak yapılır. Cevabım olarak kullanmak için eski blog yayınlarımdan birini uyarlayacağım .
Çok sayıda istemci için bir uygulama oluştururken, veritabanlarını tasarlamanın iki yaygın yolu vardır:
- Seçenek A: Tüm istemcileri aynı veritabanına koyun
- 2. Seçenek: İstemci başına bir veritabanı oluşturun
Tüm İstemcileri Aynı Veritabanına Yerleştirme
Çok basit: şemanın üst kısmına bir İstemci tablosu eklemeniz, insanların yalnızca kendi verilerini görmesini sağlamak için bir ClientUsers tablosu eklemeniz yeterlidir.
Bu yaklaşımın faydaları:
Daha kolay şema yönetimi. Geliştiriciler uygulamanın yeni bir sürümünü dağıttığında, yalnızca bir veritabanında şema değişiklikleri yapmak zorundadırlar. Farklı müşterilerin senkronize olmamaları veya yanlış sürümde olmaları konusunda endişe yoktur.
Daha kolay performans ayarı. Dizin kullanımını ve istatistikleri tek bir yerde kontrol edebilir, kolayca iyileştirmeler yapabilir ve tüm müşterilerimiz üzerindeki etkileri anında görebiliriz. Yüzlerce veya binlerce veritabanında, en küçük değişikliğin bile koordinasyonu zor olabilir. Yordam önbellek içeriğimizi kontrol edebilir ve tüm uygulamanızda hangi sorguların veya saklı yordamların en yoğun olduğunu belirleyebiliriz, ancak istemci başına ayrı veritabanları kullanırsak, farklı yürütme planlarında sorgu kullanımını daha zorlaştırabiliriz.
Harici bir API oluşturmak daha kolaydır. Dışarıdan gelenlerin ürün geliştirmesi için tüm veritabanımıza erişim izni vermemiz gerekiyorsa, tüm veriler tek bir veritabanındaysa bunu daha kolay yapabiliriz. API, birden çok sunucudaki birden çok veritabanındaki verileri gruplandırmakla ilgileniyorsa, geliştirme ve test süresi ekler. (Öte yandan, bu “birden çok sunucu” olayı, bir veritabanı-kural-hepsi-hepsi senaryosu için bir kısıtlamaya işaret etmeye başlar: bir veritabanı genellikle tüm yükümüzün yalnızca bir veritabanı sunucusunu etkilediği anlamına gelir.) , PowerBI ile herkesin tek bir veritabanında bulunması bağlantıları yönetmeyi çok daha kolay hale getirir.
Daha kolay kullanılabilirlik ve olağanüstü durum kurtarma. Endişelenecek tek şey sadece bir veritabanı ise, veritabanı yansıtma, günlük sevkiyatı, çoğaltma ve kümelemeyi yönetmek gerçekten, gerçekten basittir. Hızlı bir şekilde bir altyapı inşa edebiliriz.
Her İstemciyi Kendi Veritabanına veya Kırığına Yerleştirme
Hala bir müşteri listesine ihtiyacınız var, ancak şimdi bir dizin haline geliyor - her müşteri için, içinde yaşadığı parçayı da izliyorsunuz. Başlangıçta, uygulamanız bu tabloyu sorgular ve RAM'de önbelleğe alır. Bir istemci için verilere ihtiyaç duyduğunda, doğrudan bu parçaya (veritabanı ve sunucu) bağlanır.
Bu yaklaşımın faydaları:
Daha kolay tek istemci geri yüklenir. Müşteriler güvenilir olmayan et torbasıdır. (Benimkiler dışında - güvenilir et torbaları.) Tüm verilerini zaman içinde bir noktaya geri getirmek istedikleri her türlü “oops” anları var ve verileri karışmışsa arkada büyük bir acı var aynı tablodaki diğer istemci verileri. Tek bir istemci-veritabanı senaryosunda geri yükleme beyin ölü kolaydır: sadece istemcinin veritabanını geri yükleyin. Başka hiç kimse etkilenmez.
Daha kolay veri aktarımı. Müşteriler verilerini ellerinden almaya bayılırlar. Korkunç satıcı kilitleme senaryosundan kaçınarak verilerini istedikleri zaman çıkarabileceklerini bilmenin güvenliğini istiyorlar ve kendi raporlarını yapmak istiyorlar. Her müşterinin verileri kendi veritabanında izole edildiğinde, onlara kendi veritabanı yedeklerinin bir kopyasını verebiliriz. Veri dışa aktarma API'leri oluşturmak zorunda değiliz.
Daha kolay çoklu sunucu ölçeklenebilirliği. Uygulamamız tek bir sunucudan alabileceğimizden daha fazla güce ihtiyaç duyduğunda, veritabanlarını birden çok sunucu arasında bölebiliriz. Ayrıca yükü coğrafi olarak yayarak Asya ya da Avrupa'daki sunucuları müşterilere daha yakın hale getirebiliriz.
Müşteri başına daha kolay performans ayarı. Bazı istemciler farklı özellikler veya raporlar kullanıyorsa, herkesin veri boyutunu büyütmeden yalnızca bu istemciler için özel bir dizi dizin veya dizine alınmış görünüm oluşturabiliriz. Burada bazı riskler var - müşteriler arasındaki şema farklılıklarına izin vererek, kod dağıtımlarımızı biraz daha riskli hale getirdik ve performans yönetimimizi daha da zorlaştırdık.
Daha kolay güvenlik yönetimi. Güvenliği veritabanı başına bir kullanıcıyla düzgün bir şekilde kilitlediğimiz sürece, İstemci X'in İstemci Y'nin verilerine erişmesi konusunda endişelenmemize gerek yoktur. Ancak, herkes için tek bir giriş kullanırsak, bu endişeye gerçekten değinmedik.
Daha kolay bakım pencereleri. Müşterilerin dünyanın dört bir yanına dağıldığı küresel bir ortamda, gruplar veya bölgeler halinde yapabilirsek, müşterileri bakım için çevrimdışına almak daha kolaydır.
Hangisi sizin için uygun?
Doğru seçim yok: kendi şirketinizin güçlü ve zayıf yanlarını bilmelisiniz. Örnek olarak iki müşterimi ele alalım.
A Şirketi donanım performans ayarında mükemmeldir. Gerçekten, donanımın son parçasını bitirmek konusunda gerçekten çok iyi ve SQL Server donanımlarını 12-18 aylık bir döngüde değiştirmenin bir sakıncası yok. (Web sunucularını her 4-6 ayda bir yeniler!) Aşil topuğu aşırı uyum ve güvenlik gereksinimleridir. İnanılmaz denetim ihtiyaçları var ve onlar için kurşun geçirmez kontrolleri tek bir sunucuda, tek bir veritabanında uygulamak onlarca sunucudaki binlerce veritabanında bu gereksinimleri yönetmekten daha kolaydır. Bir veritabanı, bir sunucu, birçok istemci seçtiler.
Şirket 2 geliştirme uygulamalarında mükemmeldir. Binlerce veritabanında şema değişikliklerini ve kod dağıtımlarını yönetmek onlar için sorun değil. Dünyanın dört bir yanında müşterileri var ve bu müşteriler için 24 saat kredi kartı işlemleri yapıyorlar. Yükü coğrafi olarak dağıtma yeteneğine ihtiyaç duyarlar ve dünyadaki sunucuları her 12-18 ayda bir değiştirmek istemezler. Her müşteri için bir veritabanı seçtiler ve denizaşırı müşterileri için Asya ve Avrupa'daki SQL Server'ları kullanmaya başladıklarında işe yaradı.