2013-10-11 22 views
5

Yatay bölümlemeyi biliyorum ... birçok tablo oluşturabilirsiniz.Split MYSQL Sharding kullanarak Terabyte'lerin büyük tablosu

seen kullanıyorum. Uygulama tabanlı bir kodlamada, birden çok veritabanı sunucusunda aynı veritabanı yapısına sahip olacaksınız. Ancak aynı verileri içermez. Örneğin bu şekilde

: kırığa istihdam

Users 1 - 10000: server A 
Users 10001 - 20000: server B 

Teknikleri örneğin bazı araçlar (MySQL proxy göre) SpockProxy olduğunu MySQL-Vekil vardır. Manuel olarak da kayabiliriz. ..

------------------- 
| userA | server1 | 
| userB | server2 | 
| userC | server1 | 
------------------- 

Fakat bu yukarıdaki teknikler uygulama düzeyinde ele .. ben DB sunucu düzeyinde çözmek istiyorum bir ana tablo, ör .: olacağını Gerekli

bu şeffaf birden fazla sunucu ile yapabilirim? Bu Mysql tablolarının ölçeklenmesine izin verecektir.

X sunucularında X tabloları oluşturun ve son kullanıcı verileri tek bir DB sunucusuna basit sorguyla alır?

Özetle tek bir masaya 16 Terabyte veri eklemek istiyorum ancak tek makinede çok fazla alanım yok, bu yüzden her biri 8 terabaytlık iki sunucu yüklemek istiyorum. Ancak kullanıcı sorgusu tek db'ye ve sonuçta arka uçta iken sonuç alınabilir.

Bu tartışmayı diğer bazı iyi çözümler için de açarım örn. MYSQL Clustering.

Herkes birden fazla sunucuda nasıl bölümlendirileceğini açıklayan iyi bir başlangıç ​​öğretmeni (adım adım) açıklamayı ister mi?

+0

Bildiğim kadarıyla, tüm anahtar sözcükleri uygulama düzeyinde gerçekleştirilir. MySQL bunu şeffaf bir şekilde yapmaz. – Namphibian

+0

@Namphibian, bu soruna başka herhangi bir çözüm var, örn. Mysql kümeleme vb .. – Imran

+0

Bugün bir göz atacağım ama son kez kümelemeyi kullandım, yavaş ve gerçekten çabaya değmez. – Namphibian

cevap

0

İleri gitmeden önce düşüncenizi ayarlamanız gerekir. MySQL üzerinde bunu yapmanın kolay bir yolu olduğunu sanmıyorum - FEDERATED tablosunu ve görünümlerini kullanarak çaba gösterirseniz, bunu yapabilirsiniz. Ancak, en iyi şekilde sharklama yapmak hiç de kolay değildir.

Ancak parçalama çok zor. Tabloları biçimlendirmek neredeyse her zaman ona bakmak için yanlış bir yoldur. Bunun yerine, veri kümelerini parçalamak zorundasınız. Bunun nedeni, düğümlerdeki birleşmelerin pahalı olmasıdır.

Bu yüzden çizim tahtasına geri dönmenizi tavsiye ederim. Katılmak için gerçekten ihtiyacınız yoksa, kutu gibi bir şeyi destekleyen Cassandra gibi diğer dbs'e bakın. Bununla birlikte, birleştirme işlemlerine ihtiyacınız varsa, gerçekten, veritabanınızdaki her tabloya bakmanız ve iyi bölümleme ölçütlerini bulmanız gerekir, daha sonra bölümlendirmeniz gerekir, böylelikle aynı db şemasına ve daha sonra farklı parçalara sahip olursunuz.

Bunu bir kez hazırladıktan sonra, yönlendirme sorgularını uygun şekilde işlemek için veritabanlarınızın önüne bir proxy koydunuz. Tek bir olasılık olarak https://github.com/flike/kingshard numaralı telefona bakın (MySQL üzerinde bunlarla çalışmadığım bir yasal uyarı olarak). Proxy ile, uygulamanızı tek bir db uygulamasına getirirsiniz ve sorunuzu okudukça gerçekten neyi amaçladığınızı anlayabilirsiniz.