PostgreSQL ve MySQL'in ölçeklenebilirlik sınırlamaları


43

MySQL veya PostgreSQL gibi paylaşılmayan ilişkisel veritabanlarının performansının 10 TB'nin ötesinde "kırıldığını" duydum.

Birinin Netezza, Greenplum veya Vertica, vb.

Yanıtlar:


52

Sorunuza basit bir cevap yok, ama burada düşünülmesi gereken birkaç şey var.

İlk olarak, ölçek endişelenecek tek şey değil. Verilerinizle yaptığınız şey. 500 tablonuz 30 TB veriniz varsa ve çok az raporlama ile basit OLTP yapıyorsanız, çok fazla sorun yaşayacağınızı sanmıyorum. PostgreSQL'de 32TB veri tabanı var. Bununla birlikte, aynı zamanda performans biraz düşecektir çünkü her şeyde diske vurmak zorundadır. Benzer şekilde, eğer veride 50TB varsa, ancak yaklaşık 100 GB'lık sık rastlanan bir isabet setine sahipseniz, o zaman db'nin bu kısmını bellekte tutmak için yeterli RAM'e sahip bir sunucu oluşturabilirsiniz ve altınsınız.

Öte yandan, 1TB veriden modu (en yaygın değer) almaya çalışıyorsanız, hangi sistemi kullandığınızın bir önemi yoktur, bu ağrılı veya keskin olmayan acı verici olacaktır. (Düzenleme: Sharding, aslında, bu sorunu daha da kötüleştirebilir. )

MySQL ve PostgreSQL'de dev db'lerin karşılaştığı en büyük problemler, ikisinin de interquery paralelliğini desteklememesidir. Başka bir deyişle, bir sorgu, tek bir iş parçacığı tarafından tek bir blok olarak çalıştırılır ve parçalara bölünemez ve ayrı olarak çalıştırılamaz. Bu, büyük miktarda veri üzerinde büyük analitik sorgular çalıştırırken genellikle bir sorundur. Postgres-XC ve Green Plum’ın kurtarmaya geldiği yer burasıdır çünkü depolamayı yürütmeden ayırırlar ve bunu koordinatör düzeyinde yapabilirler. Postgres-XC ve Green Plum'ın temelde dahili olarak sharding kullandığını, ancak koordinatörlerin tüm tutarlılığı global olarak uyguladığına dikkat edin.

Sorgu içi paralellik ile sorguyu bozabilir, farklı işlemciler / disk I / O kanallarının parçalarını çalıştırabilir ve bir araya getirilen ve uygulamaya geri döndürülen sonucun parçalarını rapor edebilirsiniz. Yine, bu genellikle işlem işleme yüklerinden ziyade analitik olarak daha faydalıdır.

İkincisi, Vertica veya Greenplum gibi bazı sistemlerin birlikte bilgi sütunlarını depolamasıdır. Bu, sistemi bir OLTP perspektifinden kullanmayı zorlaştırır ve orada performansı azaltır, ancak büyük analitik iş yükleri için performansı büyük ölçüde artırır. Yani bu bir iş yüküne özgü tradeoff.

Cevap Eğer boyutunda 1-2 TB yukarıda aldıktan sonra bunun ne Yani olabilir bulmak Kendinizi sistemleri ve iş yükleri arasındaki dengeleyici bir dizi ile karşı karşıya. Yine bu, veritabanlarına, çalışma setlerinin boyutuna, vb. Özgüdür. Ancak, bu noktada gerçekten kar tanesi sistemlerine, yani iş yükünüze göre benzersiz ve özel olanlar gerekir.

Elbette bu, limitlerin genellikle ölçülebilir olmadığı anlamına gelir.

Düzenleme : Şimdi PostgreSQL'de karar destek ve işlemsel işleme iş yüklerinin bir karışımını ele alan 9TB bir veritabanıyla çalıştım. En büyük zorluk, veri setinin büyük bölümünü vuran sorularınız varsa, cevap için bir süre beklemeniz gerekmesidir.

Bununla birlikte, temellere (indeksler, oto-vakum, bunların düşük seviyede nasıl çalıştıkları, vb. Dahil) ve yeterli bilgi işlem kaynaklarına dikkatle bakıldığında, bunlar tamamen yönetilebilirdir (ve tahmin ediyorum ki, Pg'deki 30TB aralığında iyi yönetilebileceğini tahmin ediyorum).

Düzen2 : Bir kere 100TB'ye yönel. PostgreSQL'de ilk olarak tablo başına 32 TB'a vuracağı için şu anda bu aralığa ölçeklenmeyecek bir tane üzerinde çalışıyorum.


2
Postgres 9.6'nın bazı sorgu içi paralellik geliştirmeleri elde edeceği görülüyor (paralel sıralama taraması, paralel birleştirme).
a_horse_with_no_name

1
Bunun gerçekten faydalı olması için birkaç sürüm daha alacağını düşünüyorum.
Chris

@ChrisTravers Bu tür bir durumu daha iyi destekleyen başka bir veritabanı var mı? Belki mutlaka RDBMS değil? Thanks
konung

1
@konung Dürüst olmayı bilmiyorum. MapReduce motorları ile belirli bir ölçekte oynamaya değer olduğunu düşünüyorum çünkü bu, verileriniz hakkında düşünme şeklinizi şekillendirmeye yardımcı olur. Çok büyük ölçeklerde gerçekten ne yaptığınızı bilmek zorundasınız. Teradata ve Postgres-XL gibi çözümler size yardımcı olur, ancak bunlar ne yaptığınız hakkında net bir bilgi gerektiren çözümlerdir (ve orada herhangi bir RDBMS'ye dayanan o noktada kendi isteğinizi oluşturabilirsiniz).
Chris Travers

1
Ayrıca Mongo ile oynamayı tavsiye etmemin bir nedeni de (belki de) çok iyi ölçeklememesine rağmen, bu noktaya geldiğinizde federe veri ve MapReduce hakkında nasıl düşüneceğinizi öğretmesidir.
Chris Travers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.