По принцип базите данни съхраняват данни във формат на ред и използват SQL като език за заявки за достъп до тях, но този метод за съхранение не винаги е най-добрият по отношение на производителността, зависи от самото натоварване. Ако искате да получите статистически данни, най-вероятно трябва да използвате друг вид машина за съхранение на база данни.
В този блог ще видим какво представлява Columnar Storage и, за да бъдем по-конкретни, какво представлява MariaDB ColumnStore и как да го инсталирате, за да можете да обработвате вашите големи данни по по-ефективен начин за аналитични цели.
Колонно съхранение
Columnar Storage е тип машина за база данни, която съхранява данни с помощта на колонно-ориентиран модел.
Например, в обща релационна база данни можем да имаме таблица като тази:
id | собствено име | фамилно име | възраст |
1001 | Оливър | Смит | 23 |
1002 | Хари | Джоунс | 65 |
1003 | Джордж | Уилямс | 30 |
1004 | Жак | Тейлър | 41 |
Ето къде се намесва системата Columnar Storage. Вместо да се съхраняват данни в редове, данните се съхраняват в колони. Така че, ако трябва да знаете средната възраст, ще бъде по-добре да го използвате, тъй като ще имате структура като тази:
id | собствено име | id | фамилно име | id | възраст | ||
1001 | Оливър | 1001 | Смит | 1001 | 23 | ||
1002 | Хари | 1002 | Джоунс | 1002 | 65 | ||
1003 | Джордж | 1003 | Уилямс | 1003 | 30 | ||
1004 | Жак | 1004 | Тейлър | 1004 | 41 |
От друга страна, цената за извършване на единични вмъквания е по-висока от базата данни, ориентирана към редове, и не е най-добрият вариант за „SELECT *“ заявки или транзакционни операции, така че можем да кажем, че се вписва по-добре в OLAP (онлайн аналитична обработка) база данни, отколкото в OLTP (онлайн обработка на транзакции).
MariaDB ColumnStore
Това е колонна машина за съхранение, която използва масивна паралелно разпределена архитектура на данни. Това е отделно изтегляне, но ще бъде достъпно като двигател за съхранение на MariaDB Server от MariaDB 10.5.4, който все още е в процес на разработка към момента на написването на този блог.
Проектиран е за големи данни, използвайки предимствата на колонното съхранение, за да има страхотна производителност с отговор в реално време на аналитични заявки.
Архитектура на MariaDB ColumnStore
Състои се от много (или само 1) MariaDB сървъри, работещи като модули, работещи заедно. Тези модули включват потребител, производителност и съхранение.
Потребителски модул
Това е екземпляр на MariaDB сървър, конфигуриран да работи като преден край на ColumnStore.
Потребителският модул управлява и контролира работата на заявките за крайни потребители. Когато клиент изпълнява заявка, тя се анализира и разпределя към един или повече модули за производителност за обработка на заявката. След това модулът User събира резултатите от заявката и ги събира в набора от резултати, за да се върне на клиента.
Основната цел на потребителския модул е да обработва мащабиране на паралелност. Той никога не докосва директно файловете на базата данни и не изисква видимост за тях.
Модул за производителност
Той е отговорен за съхраняването, извличането и управлението на данни, обработката на заявки за блокове за операции със заявка и за предаването им обратно към потребителския модул или модулите за финализиране на заявките. Той не вижда самата заявка, а само набор от инструкции, дадени му от потребителски модул.
Модулът избира данни от диска и ги кешира в споделено нищо буфер, който е част от сървъра, на който работи.
Имайки множество възли на Performance Module, механизъм за сърдечен ритъм гарантира, че всички възли са онлайн и има прозрачен отказ при отказ в случай, че даден възел се повреди.
Съхранение
Можете да използвате локално хранилище (модули за производителност) или споделено хранилище (SAN), за да съхранявате данни.
Когато създадете таблица в MariaDB ColumnStore, системата създава поне един файл на колона в таблицата. Така например таблица, създадена с три колони, ще има минимум три, отделно адресируеми логически обекта, създадени в SAN или на локалния диск на модул за производителност.
ColumnStore оптимизира своята стратегия за компресиране за производителност на четене от диск. Той е настроен да ускорява скоростта на декомпресия, като максимизира ползите от производителността при четене от диск.
MariaDB ColumnStore използва Version Buffer, за да съхранява дискови блокове, които се модифицират, да управлява връщането на транзакции и да обслужва MVCC (контрол на паралелност с няколко версии) или функцията „четене на моментна снимка“ на базата данни. Това му позволява да предлага последователен на заявката изглед на базата данни.
Как работи MariaDB CloumnStore
Сега нека видим как MariaDB ColumnStore обработва заявка за крайния потребител, според официалната документация на MariaDB ColumnStore:
- Клиентите изпращат заявка към сървъра на MariaDB, работещ на потребителския модул. Сървърът изпълнява таблична операция за всички таблици, необходими за изпълнение на заявката, и получава първоначалния план за изпълнение на заявката.
- Използвайки интерфейса на механизма за съхранение на MariaDB, ColumnStore преобразува обекта на таблицата на сървъра в обекти на ColumnStore. След това тези обекти се изпращат до процесите на потребителския модул.
- Потребителският модул преобразува плана за изпълнение на MariaDB и оптимизира дадените обекти в план за изпълнение на ColumnStore. След това определя стъпките, необходими за изпълнение на заявката и реда, в който те трябва да бъдат изпълнени.
- След това потребителският модул се консултира с картата на обхвата, за да определи кои модули за производителност да се консултира за необходимите му данни, след това извършва елиминиране на степента, елиминирайки всички модули за производителност от списъка, които съдържат само данни извън обхвата на какво изисква заявката.
- Потребителският модул след това изпраща команди до един или повече модули за производителност за извършване на блокови I/O операции.
- Модулът за производителност или модулите извършват филтриране на предикати, обработка на присъединяване, първоначално агрегиране на данни от локално или външно съхранение, след което изпращат данните обратно към потребителския модул.
- Потребителският модул извършва окончателното агрегиране на набора от резултати и съставя набора от резултати за заявката.
- Потребителският модул / ExeMgr изпълнява всички изчисления на функцията на прозореца, както и всяко необходимо сортиране в набора от резултати. След това връща набора от резултати на сървъра.
- Сървърът MariaDB изпълнява всякакви функции за избор на списък, операции ORDER BY и LIMIT върху набора от резултати.
- Сървърът MariaDB връща набора от резултати на клиента.
Как да инсталирате MariaDB ColumnStore
Сега нека видим как да го инсталираме. За повече информация можете да проверите официалната документация на MariaDB.
Ще използваме CentOS 7 като операционна система, но вместо това можете да използвате всяка поддържана ОС. Инсталационните пакети са достъпни за изтегляне тук.
Първо, ще трябва да инсталирате хранилището за допълнителни пакети:
$ yum install -y epel-release
След това, следните необходими пакети:
$ yum install -y boost expect perl perl-DBI openssl zlib snappy libaio perl-DBD-MySQL net-tools wget jemalloc numactl-libs
И сега, нека изтеглим най-новата версия на MariaDB ColumnStore, декомпресираме и инсталираме:
$ wget https://downloads.mariadb.com/ColumnStore/latest/centos/x86_64/7/mariadb-columnstore-1.2.5-1-centos7.x86_64.rpm.tar.gz
$ tar zxf mariadb-columnstore-1.2.5-1-centos7.x86_64.rpm.tar.gz
$ rpm -ivh mariadb-columnstore-1.2.5-1-*.rpm
Когато приключи, ще видите следното съобщение:
Следващата стъпка е:
If installing on a pm1 node using non-distributed install
/usr/local/mariadb/columnstore/bin/postConfigure
If installing on a pm1 node using distributed install
/usr/local/mariadb/columnstore/bin/postConfigure -d
If installing on a non-pm1 using the non-distributed option:
/usr/local/mariadb/columnstore/bin/columnstore start
И така, за този пример, нека просто изпълним командата:
$ /usr/local/mariadb/columnstore/bin/postConfigure
Сега ще ви поиска информация за инсталацията:
This is the MariaDB ColumnStore System Configuration and Installation tool.
It will Configure the MariaDB ColumnStore System and will perform a Package
Installation of all of the Servers within the System that is being configured.
IMPORTANT: This tool requires to run on the Performance Module #1
Prompting instructions:
Press 'enter' to accept a value in (), if available or
Enter one of the options within [], if available, or
Enter a new value
===== Setup System Server Type Configuration =====
There are 2 options when configuring the System Server Type: single and multi
'single' - Single-Server install is used when there will only be 1 server configured
on the system. It can also be used for production systems, if the plan is
to stay single-server.
'multi' - Multi-Server install is used when you want to configure multiple servers now or
in the future. With Multi-Server install, you can still configure just 1 server
now and add on addition servers/modules in the future.
Select the type of System Server install [1=single, 2=multi] (2) > 1
Performing the Single Server Install.
Enter System Name (columnstore-1) >
===== Setup Storage Configuration =====
----- Setup Performance Module DBRoot Data Storage Mount Configuration -----
There are 2 options when configuring the storage: internal or external
'internal' - This is specified when a local disk is used for the DBRoot storage.
High Availability Server Failover is not Supported in this mode
'external' - This is specified when the DBRoot directories are mounted.
High Availability Server Failover is Supported in this mode.
Select the type of Data Storage [1=internal, 2=external] (1) >
Enter the list (Nx,Ny,Nz) or range (Nx-Nz) of DBRoot IDs assigned to module 'pm1' (1) >
===== Performing Configuration Setup and MariaDB ColumnStore Startup =====
NOTE: Setting 'NumBlocksPct' to 50%
Setting 'TotalUmMemory' to 25% of total memory.
Running the MariaDB ColumnStore setup scripts
post-mysqld-install Successfully Completed
post-mysql-install Successfully Completed
Starting MariaDB Columnstore Database Platform
Starting MariaDB ColumnStore Database Platform Starting, please wait ....... DONE
System Catalog Successfull Created
MariaDB ColumnStore Install Successfully Completed, System is Active
Enter the following command to define MariaDB ColumnStore Alias Commands
. /etc/profile.d/columnstoreAlias.sh
Enter 'mcsmysql' to access the MariaDB ColumnStore SQL console
Enter 'mcsadmin' to access the MariaDB ColumnStore Admin console
NOTE: The MariaDB ColumnStore Alias Commands are in /etc/profile.d/columnstoreAlias.sh
Изпълнете генерирания скрипт:
$ . /etc/profile.d/columnstoreAlias.sh
Сега можете да получите достъп до базата данни, изпълнявайки командата “mcsmysql”:
$ mcsmysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.3.16-MariaDB-log Columnstore 1.2.5-1
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Това е. Сега можете да заредите данни във вашата база данни MariaDB ColumnStore.
Заключение
Columnar Storage е чудесна алтернатива за съхранение на база данни за обработка на данни за аналитични цели. MariaDB ColumnStore е механизъм за Columnar Storage, предназначен за тази задача и както видяхме, инсталацията е доста лесна, така че ако имате нужда от OLAP база данни или обработвате големи данни, трябва да опитате.