Shopify'ın tüm dükkanlar için tek bir veritabanı kullandığını biliyorum. Fakat veritabanlarını bu kadar büyük bir veriyle nasıl ele alabilirler? 50.000'den fazla mağaza için tek bir veritabanı kullanmak iyi bir fikir mi?
Shopify'ın tüm dükkanlar için tek bir veritabanı kullandığını biliyorum. Fakat veritabanlarını bu kadar büyük bir veriyle nasıl ele alabilirler? 50.000'den fazla mağaza için tek bir veritabanı kullanmak iyi bir fikir mi?
Yanıtlar:
Lütfen dikkat: Bir SQL Server perspektifinden cevap veriyorum, bu yüzden SQL Server'a özgü bazı kavramlardan bahsediyorum, ancak tüm bu kavramların benzer avantajları ve sınırlamaları olan diğer büyük RDBMS platformlarında eşdeğerleri olduğuna inanıyorum.
Diğer potansiyel artıları / eksileri düşündüğümde muhtemelen bu cevabı düzenlemeye devam edeceğim.
Peki, gerçekten şema, hacim vb. 50.000 kedi veya 50.000 ürün veya 50.000 kanat kuruyemiş hakkında veri depolamaktan farkı nedir?
50.000 farklı müşteriye ait verileri tek bir veritabanında depolamak istememenizin birkaç nedeni olabilir (gerçekten de veriler müşteri tarafından tamamen ayrılabilirse (posta kodları gibi arama tabloları dahil değil) tek bir merkezi veritabanına girebilecek uygulamaya özgü tablolar):
bir müşteri uygulamasını outgrows istiyorsan, durma ve benzeri bir şey üzerine bölme planı sürece, dışarı ölçekli sadece kendi veri ayıklamak ve vb başka örneği, sunucu taşımak için kolay bir yolu yoktur CustomerID
ve konum (50.000 dosya gruplarını var sınırlı yine de 15.000 bölüme veya SQL Server'ın eski bir sürümündeyken 1.000'e ve çok fazla dosya grubuna sahip olmak felaket olabilir ). Ayrıca bölümlemenin Enterprise Edition gerektirdiğini unutmayın.
tüm müşterilerinizin bu örnek için çok büyük olduğu ortaya çıkarsa, ölçeklendirme yeni donanım almak ve tüm veritabanını oraya taşımak (ve muhtemelen bunu tekrar yolda yapmak) anlamına gelir.
çok büyük tablolardan satırların bazılarını silmek zorunda kalacağınız için, bir müşteriyi silmek aynı derecede acı verici olabilir ve bu ucuz olmayacaktır.
büyük olasılıkla müşteri verilerinin geniş bir dağılımına sahip olacaksınız (bir müşteri milyar satır, diğer müşteri 5.000 müşteri). Bu, parametre koklama ve kardinalite ve plan kalitesini içeren zararlı performans gibi şeylere yol açabilir (çünkü aynı planları çok farklı veri kümelerine karşı aynı planları tekrar kullanacağınız için).
tüm müşterileriniz aynı SLA ve HA / DR planlarına tabidir. Tüm veritabanına n-günlük günlük yedeklemeleri ile tam kurtarma modunda sahipsiniz ya da basit ve tam + diff yedeklerine güveniyorsunuz. Bir müşteri hatası nedeniyle geri dönmeniz veya veritabanını belirli bir zamanda kurtarmanız gerekiyorsa, bu her bir müşteriyi etkiler.
veri almada hata olasılığı vardır - örneğin, cümlelerin bir müşterinin başka bir müşterinin verilerini veya diğer tüm müşterilerin verilerini görmesine yol açabileceği hatalar .
yasal sonuçlar olabilir (bazı şirketlerin verilerini başka bir şirketle ve özellikle de rakipleriyle aynı veritabanına yerleştirmemeniz için katı gereksinimleri olacaktır).
herhangi bir müşterinin verilerinin güvenliği önemliyse, bunu elde etmek, veritabanı ayırmayı kullanarak tablodaki ayırmadan çok daha kolaydır.
Her bir müşterinin ayrı bir veritabanına sahip olmasının (veya en azından her biri bir grup müşteri için birden fazla veritabanına sahip olmanın) bazı avantajları:
DROP DATABASE
.Bazı dezavantajlar: