it-swarm-eu.dev

Omezení škálovatelnosti PostgreSQL a MySQL

Slyšel jsem, že výkon nestřežené relační databáze, jako je MySQL nebo PostgreSQL, se „zlomí“ nad 10 TB.

Mám podezření, že limity jako takové existují, protože člověk by nepřišel s Netezzou, Greenplumem nebo Vertica atd., Chtěl bych se však zeptat, zda má někdo zde odkaz na nějaký výzkumný dokument nebo formální případové studie, kde jsou tyto limity kvantifikovány.

43
Edmon

Na vaši otázku neexistuje jednoduchá odpověď, ale zde je několik věcí, na které byste se měli zamyslet.

Zaprvé, měřítko není jediná věc, o kterou se musíme starat. Co děláte s vašimi daty je. Pokud máte 500 tabulek 30 TB dat a děláte jednoduché OLTP s velmi malým počtem hlášení), nemyslím si, že budete mít příliš mnoho problémů "Tam jsou 32TB databáze na PostgreSQL tam venku. Zároveň se však výkon poněkud sníží, protože to musí zasáhnout disk na všechno. Podobně, pokud máte 50 TB, pokud data, ale mají běžně zasaženou sadu asi 100 GB, pak můžete Postavte server s dostatečným množstvím RAM), abyste tuto část db udrželi v paměti a jste zlatí.

Na druhou stranu, pokud se pokoušíte režim (nejběžnější hodnotu) z 1TB dat, nezáleží na tom, jaký systém používáte, bude to bolestivé s nebo bez střepů. (Edit: Sharding může ve skutečnosti tento problém zhoršit . )

Mezi hlavní problémy, s nimiž se setkáte s obrovskými db na MySQL a PostgreSQL, patří skutečnost, že ani nepodporuje paralelismus dotazování. Jinými slovy, dotaz je spuštěn jako jeden blok jedním vláknem a nelze jej rozdělit na kousky a spustit samostatně. Toto je nejčastěji problém při spouštění velkých analytických dotazů na velké množství dat. To je místo, kde Postgres-XC a Green Plum přicházejí k záchraně, protože oddělují úložiště od provádění, a mohou tak učinit na úrovni koordinátora. Všimněte si, že Postgres-XC a Green Plum v zásadě používají střepiny interně, ale koordinátoři prosazují veškerou konzistenci globálně.

S paralelizací dotazování můžete dotaz rozdělit, mít různé procesory/diskové I/O kanály spouštět jeho části a vykazovat zpětné části sady výsledků, které mají být sestaveny, a předány zpět do aplikace. To je opět velmi užitečné při analytickém namísto zpracování transakcí.

Druhou věcí je, že některé systémy, například Vertica nebo Greenplum, uchovávají sloupce informací společně. To ztěžuje použití systému z perspektivy OLTP) a snižuje tam výkon, ale drasticky zvyšuje výkon pro velké analytické pracovní zatížení. Jedná se tedy o kompromis specifický pro pracovní vytížení.

Odpověď je, že jakmile se dostanete nad 1-2 TB ve velikosti, kterou můžete , můžete , ocitnout se tváří v tvář číslu kompromisů mezi systémy a pracovním zatížením. Opět je to specifické pro databáze, velikost pracovních sad atd. Nicméně v tomto bodě musíte opravdu jít se systémy sněhové vločky, tj. systémy jedinečné a přizpůsobené vašemu pracovnímu zatížení.

To samozřejmě znamená, že limity nejsou obecně kvantifikovatelné.

pravit: Nyní jsem pracoval s 9TB databází, která zpracovává směs pracovní podpory při rozhodování a transakčního zpracování v PostgreSQL. Jedinou největší výzvou je, že pokud máte otázky, které zasáhly velkou část sady dat, budete muset chvíli počkat na odpověď.

Nicméně s pečlivou pozorností k základům (včetně indexů, autovaku, jak tyto fungují na nízké úrovni atd.) A dostatečným výpočetním prostředkům, jsou zcela zvládnutelné (a odhaduji, že by dobře zvládnutelné do rozsahu 30TB v Pg).

Edit2: Jakmile se vydáte na 100 TB, i když to, co bude fungovat, bude záviset na vašem datovém souboru. Momentálně pracuji na jednom, který se do tohoto rozsahu nevejde, protože to nejprve zasáhne limit 32 TB v tabulce v PostgreSQL.

52
Chris Travers