2009-11-29 31 views
5

Yapım aşamasında olan bir çevrimiçi pazar ürünü için, bir veritabanı paylaşım çözümünün uygulanmasını gerektiren bir durumum var. Ben şaka yapmak için yeni ve bu forumda yazılarını okuduktan sonra iş varlıkların uygun olacak bir dizin tabanlı sharding strateji hissediyorum. Fakat yine de, bu tür bir keskinleştirilmiş çözümle benimsemenin, denormalizasyon ve veri senkronizasyonu ile ilgili en iyi uygulamalardan hala emin değilim. 3 ana varlık, tedarikçi, müşteri ve sipariş olacaktır. Sipariş verilerinin çoğunun tedarikçi yöneticileri tarafından gerçekleştirileceği için tedarikçi kimliğine dayanarak veritabanını parçalamayı planlıyorum. Bu, bir tedarikçi için siparişlerin, çapraz db getirmelerini ortadan kaldıran tek bir db örneğinden alınmasını sağlayacaktır. Ancak, bu durumda, müşteriler sipariş bilgilerini görüntülediğinde, verinin birden çok db örneğinde yer alacağı ve çoklu veritabanı getirme gerektireceği belirtilmektedir. Bu tür senaryolar keskin bir çözümde ortaya çıktığında tipik olarak ne yapılır.veri tabanı oluşturma stratejisi

cevap

11

Sanırım,% 99,9'luk bir olasılıkla, payandalamaya ihtiyacınız yoktur.

  • Kişisel veritabanı ekleme/güncelleme oranı yakındır veya uygun bir maliyetle yapabilirsiniz satın yüksek spec sunucusunun kapasitesini VE
  • aşan zaten You tarımla da: eğer

    Sen Sharding gerek vb okuma sorguları, raporlama, yedekleme çoğunda salt okunur çoğaltılmış için köle

  • dışarı size master sunucuya kapalı herhangi gereksiz veya alakasız güncelleme-ağır iş yüklerini taşımak için fonksiyonel bölme yapmış

Yukarıdakilerin üçüne kesinlikle "evet" diyemezseniz, parçalamaya gerek yoktur.

Oku

http://www.mysqlperformanceblog.com/2009/08/06/why-you-dont-want-to-shard/

+0

Teşekkürler. Sana tamamen katılıyorum. Bununla birlikte, parçalamak zorunda olduğum varsayıldığında, verilen problem için uygun stratejinin ne olduğu. Top sahası tahminlerim, DB'nin geçmiş/geçmiş veriler olmadan yaklaşık 1 TB boyutunda olacağını gösterir. – cosmos

+0

Kimsenin size bunu anlatabileceğini sanmıyorum, uygulamanızın hangi bölümlerinin en çok veritabanı ile yarıştığına dair detaylı bilgi sahibi değilseniz bunu yapamazsınız. Eğer sivri uçluyorsanız, muhtemelen diğer birçok caddeyi tüketmiş olursunuz. Erişim modeline bağlı olarak, 1Tb büyük değildir ve hala 1 kutu üzerinde çalışabilir (ilgili hatalar vb. Ile) – MarkR

2

Veritabanı Sharding veritabanı boyutunda çoklu TBs olmaya alır önce bile son derece etkili olabilir. Bulduğumuz ana sebep, bellek/CPU'nun diske oranının önemli ölçüde değişmesi ve MySQL gibi DBMS ürünlerinin son kullanılan endeksleri ve verileri belleğe yerleştirmede gerçekten mükemmel olmasından kaynaklanıyor.

Veri kayması sorunlarınız için, bu teknik yardımcı olabilir.

  • Paralel Sorgu (buna "Git Balık" sorgusu diyoruz). Bu fikirle müşteri siparişlerinizi aynı anda birden fazla parçadan sorgulayabilir ve sonuçları birleştirebilirsiniz. Eğer bitmişse bu çok verimli olabilir.

Sıklıkla değiştirilmeyen veriler için, genel tablo tabloları için Genel Tablo çoğaltmasını öneririz, ancak bu, Müşteri Siparişleri kadar etkin bir şeyle pek yardımcı olmaz. Her durumda, sonlandırma, çok uygun maliyetli bir şekilde uygulanabilir ve yazımlar için doğrusal olarak ölçeklenebilir ve çoğunlukla, yukarıdakilere dayanan okumalar için doğrusal olarak daha iyi olabilir.

1

Ayrıca, MongoDB veya Cassandra

Ayrıca hızlı erişim

Ayrıca birden köle ile efendi köle çoğaltma içine bakabilirsiniz için veri önbelleğe memcache kullanabilirsiniz olarak NoSQL DBS denemek isteyebilirsiniz.

İlgili konular