sql >> Databáze >  >> RDS >> MariaDB

Analytics s MariaDB AX – tThe Open Source Columnar Datastore

Dávno pryč jsou doby přístupu založeného na jedné databázi.

S rostoucími požadavky na rychlost, výkon a agilitu se objevila řada datových úložišť, která mají vyřešit jeden konkrétní problém. Máme relační databáze, úložiště dokumentů, databáze časových řad, sloupcové databáze, fulltextové vyhledávače.

Je docela běžné vidět, že více datových úložišť spolupracuje ve stejném prostředí.

Jak tedy MariaDB AX zapadá do obrázku? Jak si stojí ve srovnání s MariaDB TX a jaký problém řeší?

V tomto příspěvku na blogu se podíváme na MariaDB AX a uvidíme, proč ji možná budete chtít používat.

Co je MariaDB AX?

Za prvé, co je MariaDB AX?

Je to úložiště sloupců a svá data ukládá do ...sloupců! Je implementován jako samostatný engine v databázi MariaDB 10.3.

Jak možná víte, MySQL a MariaDB jsou navrženy pro použití zásuvných úložišť. Každý modul úložiště, ať už je to InnoDB, Aria, MyRocks, Spider nebo jakýkoli jiný engine, jsou pluginy.

Stejně tak MariaDB AX používá ColumnStore engine:

MariaDB [(none)]> SHOW ENGINES\G
*************************** 1. row ***************************
      Engine: Columnstore
     Support: YES
     Comment: Columnstore storage engine
Transactions: YES
          XA: NO
  Savepoints: NO

Vzniká tak zajímavá kombinace. Analýzu SQL provádí MariaDB, takže můžete očekávat, že budete pracovat se syntaxí dotazu, která je velmi podobná té, na kterou jste zvyklí v MariaDB. To také usnadňuje kombinaci přístupu k MariaDB AX a MariaDB TX ve stejné aplikaci. Pro připojení ke dvěma datovým úložištím nejsou potřeba žádné specifické konektory nebo knihovny. Vše lze provést pomocí klientské knihovny MySQL nebo MariaDB. Pro obě datová úložiště můžete také využít MaxScale, což může pomoci vybudovat vysokou dostupnost pro MariaDB AX.

Proč bychom měli používat sloupcové úložiště dat?

Pojďme si projít krátký úvod k myšlence sloupcových datových úložišť.

Čím se MariaDB AX liší od MariaDB TX?

Hlavním rozdílem je struktura dat. V typické databázi jsou data uložena jako řádky.

Id, Product, Price, Code, Warehouse
1, Door, 10, 12334, EU1
2, Window, 9, 9523, EU1
3, Glass, 12, 97643, EU2

Jak můžete vidět, máme tři řádky, z nichž každý obsahuje všechna data o položce produktu.

Problém je v tom, že tento způsob ukládání dat není skutečně efektivní, když chcete získat jen podmnožinu těchto dat. Řekněme, že chcete získat pouze sloupce „Produkt“ a „Cena“ – k tomu musíte přečíst celé řádky, všechna data a pak zahodit nepotřebné sloupce. Složité je také třídění dat. Pokud byste chtěli seřadit datovou sadu od nejdražšího po nejlevnější produkt, musíte si vše přečíst a poté provést řazení.

Všichni víme, že databáze využívají indexy k urychlení přístupu. Index je strukturován tak, že obsahuje obsah indexovaného sloupce a také ukazatel na celý řádek (v InnoDB je to primární klíč). Například index ve sloupci „Produkt“, za předpokladu, že „Id“ je primární klíč, může vypadat takto:

Product, Id
Door, 1
Window, 2
Glass, 3

To urychluje přístup k datům, protože není potřeba číst celý řádek, jen abyste našli hodnotu ve sloupci „Produkt“. Jakmile jej databáze najde, může číst zbytek řádku (je-li potřeba) podle ukazatele.

Ve sloupovém skladu je to jinak. Data nejsou strukturována jako řádky, ale jako sloupce. Do jisté míry je to podobné indexu. Naše tabulka ve sloupcovém datovém úložišti může vypadat takto:

Id: 1, 2, 3
Product: Door, Window, Glass
Price: 10, 9, 12
Code: 12334, 9523, 97643
Warehouse: EU1, EU1, EU2

V MariaDB AX jsou sloupce uloženy v samostatných souborech, každý záznam pro daný „řádek“ začíná se stejným posunem.

Hlavní výhodou je, že pokud chcete spustit dotaz, který bude pracovat pouze s podmnožinou dat, stačí načíst data pouze ze sloupců, které jsou pro dotaz relevantní.

V našem příkladu výše, místo čtení celé datové sady, můžeme pouze načíst data pro sloupce „Produkt“ a „Cena“. Snižuje množství dat potřebných k přístupu na disku a urychluje proces.

Co je také důležité, ukládání dat do sloupců je činí méně zřetelnými, což umožňuje lepší kompresi. Například v našem sloupci „Sklad“ máme pouze dva typy záznamů. I ve scénáři reálného světa je velmi pravděpodobné, že skončíme s malým počtem skladů v porovnání s počtem produktů. Díky tomu je sloupec „Sklad“ velmi dobrým cílem pro kompresi.

Výsledkem toho všeho je, že sloupcová datová úložiště mohou lépe zpracovávat velké datové sady a mohou se na ně dotazovat efektivněji než „standardní“ databáze zaměřené na OLTP.

Proč bych měl používat MariaDB AX?

Přístup k disku je hlavním úzkým hrdlem v databázích. Sloupcové úložiště dat zlepšuje výkon snížením množství dat, která je třeba číst z disku. Přečte pouze data nezbytná k zodpovězení dotazu.

MariaDB AX samozřejmě není jediným sloupcovým úložištěm dat. Existuje mnoho dalších, jako například Clickhouse nebo Apache HBase.

Pravdou je, že žádná z ostatních možností nepodporuje úplnou syntaxi SQL, kterou dělá MySQL. Vyžadují různé konektory, jiný přístup k dotazování na data, zatímco MariaDB AX lze dotazovat stejně jako byste se dotazovali na „normální“ MariaDB.

Co je také důležité, vzhledem k tomu, že MariaDB AX využívá engine ColumnStore, je naprosto v pořádku jej smíchat s jinými motory. Můžete bez problémů kombinovat a spojovat tabulky InnoDB a ColumnStore ve stejném dotazu.

Kromě toho nástroje dodávané s MariaDB TX, jako je MaxScale, budou s MariaDB AX fungovat dobře, takže bude snazší vytvořit integrované a snadno použitelné prostředí. Když tedy používáte ClusterControl s MariaDB 10.3 a MaxScale, můžete do mixu snadno přidat MariaDB AX a bude fungovat s ostatními částmi nastavení.

MariaDB AX přichází s nástroji, které mají pomoci s přenosem dat z jiných zdrojů. Pokud náhodou používáte Kafka nebo Spark, existují konektory, které můžete použít při importu dat z těchto zdrojů do MariaDB AX.

Navíc, i když pravidelná replikace mezi MariaDB TX (InnoDB) a MariaDB AX (ColumnStore) nefunguje dobře kvůli omezením ColumnStore (vždy je lepší provádět dávkové vkládání do sloupcových datových úložišť než jednotlivé vkládání, protože se to dělá při replikaci), je možné vybudovat potrubí, které by sestávalo z MaxScale nakonfigurovaného jako binlog server a routeru Avro CDC, MaxScale CDC Data Adapter a MariaDB AX, které budou přijímat data z adaptéru téměř v reálném čase.

Doufáme, že vám tento příspěvek na blogu poskytne přehled o tom, co je MariaDB AX a jak jej lze využít spolu s prostředím MariaDB TX nasazeným a spravovaným ClusterControl (stáhněte si jej zdarma!).


  1. Online upgrade schématu v MySQL Galera Cluster pomocí metody RSU

  2. Odeberte záhlaví sloupce do výstupního textového souboru

  3. Proč jsou skalární funkce SQL Serveru pomalejší?

  4. Doporučené postupy pro práci s více tabulkami