SORU
4 NİSAN 2011, PAZARTESİ


Sharding yaklaşımlar MySQL?

Ne MySQL tabloları Sharding için en iyi yaklaşımdır. Aklıma gelen yaklaşımlar

  1. Uygulama Düzeyi sharding?
  2. MySQL proxy Sharding katman?
  3. Sharding merkezi arama sunucusu?

Bu alanda ilginç projeler veya araçlar var mı?

CEVAP
11 NİSAN 2011, PAZARTESİ


Tamamen kaçınılmaz olduğu sürece bunu yapmak için MySQL tabloları sharding için en iyi yaklaşım.

Bir uygulama yazarken, genellikle çok hız, geliştirici hızı maksimize bir şekilde yapmak istiyorum. Sadece gerekli gecikme süresi (cevap hazır olana kadar zaman) veya geçiş (zaman birimi başına Cevap Sayısı) için optimize.

Senin bölüm ve atama bölümleri için farklı bilgisayarlar (= parça) sadece zaman toplamı tüm bu bölümler yok artık uyum üzerine tek bir veritabanı sunucu örneği - sebep olmak ya da yazar ya da okur.

Bu da bir vaka yazma) yazma sıklığını bu sunucuları diskleri kalıcı ya da b) aşırı yükleniyor çok yazar sürekli çoğaltma Bu çoğaltma hiyerarşi içinde kalıyor bu yüzden oluyor.

Read dava için sharding zaman boyutu veri çok büyük çalışma kümesi artık uyan içine bellek ve veri okur başlamak isabet disk yerine hizmet bellek çoğu zaman.

Sadecevarsana shard.


Sana shard anda birden çok şekilde bunun bedelini Ödeyeceksin:

SQL çok daha açıklayıcı olur.

Normalde, SQL veritabanı istediğini söylüyor ve veri erişim programı içine şartname açmak için doktoru ona bırakın. Esnek, çünkü iyi bir şeydir, ve bu veri yazma için erişim programları hız zarar veren çalışmak çok sıkıcı.

Bir sharded ortamı vardır muhtemelen katılmadan bir tablo üzerinde Bir düğüm karşı veri düğümü B, ya da bir tablo daha büyük bir düğüm, düğümler ve B ve katılma verilerden karşı veri düğüm B ve C. olduğunuz başlayan uygulama yazmak için yan hash tabanlı birleştirme kararları elle amacıyla çözümlemek (ya da seni yeniden icat MySQL küme), anlamını sonunda bir sürü SQL artık Bildirge, ama usul bir şekilde ifade SQL işlevi döngü içinde bir SELECT deyimi kullanıyorsunuz (örn.

Ağ gecikme süresi çok fazla ödemeden.

Normalde bir SQL sorgu yerel olarak çözülebilir ve iyileştirici, maliyetleri yerel disk erişir ve çözümler ile ilgili olan maliyetleri en aza indirecek şekilde sorgu bilir.

Bir sharded çevre, sorgu çözülmüş olarak çalışan bir anahtar-değer erişir çapında bir ağ için birden çok düğüm (umarım ile toplanmış anahtar erişir ve bireysel anahtar aramalar başına gidiş-dönüş) veya iterek parçaları WHERE fıkra ileriye düğümler nerede uygulanabilir ('diye durum bastırma'), ya da her ikisi.

Ama bile en iyi durumda bile bu içerir çok daha fazla Ağ yerel bir durum bu tur gezileri, ve daha karmaşıktır. MySQL iyileştirici ağ gecikmesi hakkında hiç bir şey bilmediğinden hiç (Tamam, MySQL küme yavaş yavaş hala geçerlidir bu küme dışında vanilya MySQL için de, ama daha iyi oluyor) özellikle.

SQL ifade çok güç kaybediyor.

Tamam, bu muhtemelen daha az önemlidir, ancak veri bütünlüğü için anahtar kısıtlamaları ve diğer SQL mekanizmaları yabancı birden fazla kırıkları kapsayan aciz.

MySQL çalışma düzeni içinde bir zaman uyumsuz sorgu sağlayan hiçbir API vardır.

Veri aynı tür bulunduğu birden çok düğüm (örneğin kullanıcı veri düğümleri A, B ve C), yatay sorgular, sık sık ihtiyacımız olacak çözüme karşı bütün bu düğümleri ("Bul tüm kullanıcı hesapları var değil oturum için 90 gün veya daha fazla"). Veri erişim zaman birden çok düğüm paralel olarak istenebilir sürece düğüm sayısı ile lineer olarak büyür, ve sonuç olarak geldikleri gibi toplu ("Göster-Azaltmak").

Bunun için önkoşul iyi bir çalışma şekli MySQL için var olmayan bir zaman uyumsuz iletişim API. Alternatif bir sezon emmek dünyasına geçmesi ziyaret olan çocuk süreçleri, çatallaşma ve bağlantıları çok.


Sharding başladığınızda, veri yapısı ve ağ topolojisi uygulama için performans noktaları olarak görünür hale gelir. Oldukça iyi gerçekleştirmek için, uygulama bu şeylerin farkında olması gerekir, ve o gerçekten sadece uygulama düzeyinde sharding mantıklı anlamına gelir.

Asıl soru, daha fazla istiyorsanız otomatik shard (belirleme hangi sıra gider ... hangi düğüm tarafından karma birincil anahtarlar için örnek) ya da isterseniz split işlevsel bir manuel şekilde"tabloları ile ilgili kullanıcı xyz hikaye gitmek için bu ana, ise abc ve def ile ilgili tablolar gitmek ana").

Fonksiyonel sharding, eğer doğru yapılırsa, tüm tabloları kullanıcı hikayeleri ile ilgili yerel olarak kullanılabilir, çünkü çoğu geliştirici için görünmez çoğu zaman, bir avantaja sahiptir. Onlara hala Bildirge SQL den mümkün olduğunca uzun süre fayda sağlar, ve ayrıca çapraz-ağ transferleri sayısı az tutulur, çünkü daha az ağ gecikme tabi olacaktır.

Fonksiyonel sharding tek bir tablo için bir örnek daha büyük olmasına izin vermiyor, bu dezavantajı vardır, ve bir tasarımcı El Kitabı dikkat gerektirir.

Fonksiyonel sharding nispeten kolay değil çok fazla büyük değişiklikler bir dizi ile varolan bir kod temeli için yapılan bir avantaja sahiptir. http://Booking.com yıl içinde birden fazla kez yaptı ve onlar için çalıştı.


Sorunuzun bakarak tüm bunları söyledikten sonra, yanlış sorular soruyorsun inanıyorum, ya da tamamen sorun ifadenizi yanlış anlama benim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • captainpuppys2000

    captainpuppy

    20 HAZİRAN 2013
  • FUzzyBUnnyBOoties

    FUzzyBUnnyBO

    3 EKİM 2007
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009