一般に、データベースはデータを行形式で保存し、SQLをクエリ言語として使用してアクセスしますが、この保存方法はパフォーマンスの点で常に最適であるとは限らず、ワークロード自体に依存します。統計データを取得したい場合は、おそらく別の種類のデータベースストレージエンジンを使用する必要があります。
このブログでは、Columnar Storageとは何か、より具体的には、MariaDB ColumnStoreとは何か、ビッグデータをよりパフォーマンスの高い方法で処理できるようにインストールする方法について説明します。分析目的。
列指向ストレージは、列指向モデルを使用してデータを格納するデータベースエンジンの一種です。
たとえば、一般的なリレーショナルデータベースでは、次のようなテーブルを作成できます。
id | 名 | 姓 | 年齢 |
1001 | | | 23 |
1002 | | | 65 |
1003 | | | 30 |
1004 | | | 41 |
id | 名 | id | 姓 | id | 年齢 | ||
1001 | | 1001 | | 1001 | 23 | ||
1002 | | 1002 | | 1002 | 65 | ||
1003 | | 1003 | | 1003 | 30 | ||
1004 | | 1004 | | 1004 | 41 |
MariaDB ColumnStore
これは、超並列分散データアーキテクチャを使用する柱状ストレージエンジンです。これは別のダウンロードですが、このブログの執筆時点でまだ開発中のMariaDB10.5.4からMariaDBサーバーのストレージエンジンとして利用できるようになります。
ビッグデータ向けに設計されており、列型ストレージの利点を利用して、分析クエリへのリアルタイム応答で優れたパフォーマンスを発揮します。
MariaDBColumnStoreアーキテクチャ
これは、モジュールとして動作し、連携して動作する多数(または1つだけ)のMariaDBサーバーで構成されています。これらのモジュールには、ユーザー、パフォーマンス、ストレージが含まれます。
これは、ColumnStoreのフロントエンドとして動作するように構成されたMariaDBサーバーインスタンスです。
ユーザーモジュールは、エンドユーザークエリの操作を管理および制御します。クライアントがクエリを実行すると、クエリが解析され、1つ以上のパフォーマンスモジュールに配布されてクエリが処理されます。次に、ユーザーモジュールはクエリ結果を収集し、それらを結果セットにアセンブルしてクライアントに返します。
ユーザーモジュールの主な目的は、同時実行スケーリングを処理することです。データベースファイルに直接触れることはなく、データベースファイルを表示する必要もありません。
データの保存、取得、管理、クエリ操作のブロックリクエストの処理、クエリリクエストを完了するためのユーザーモジュールへのデータの返送を担当します。クエリ自体は表示されませんが、ユーザーモジュールから指定された一連の指示のみが表示されます。
モジュールはディスクからデータを選択し、それが実行されているサーバーの一部であるシェアードナッシングバッファーにデータをキャッシュします。
複数のパフォーマンスモジュールノードを備えたハートビートメカニズムにより、すべてのノードがオンラインになり、特定のノードに障害が発生した場合に透過的なフェイルオーバーが保証されます。
ローカルストレージ(パフォーマンスモジュール)または共有ストレージ(SAN)を使用して、データを保存できます。
MariaDB ColumnStoreにテーブルを作成すると、システムはテーブルの列ごとに少なくとも1つのファイルを作成します。したがって、たとえば、3つの列で作成されたテーブルには、SANまたはパフォーマンスモジュールのローカルディスク上に作成された、少なくとも3つの個別にアドレス指定可能な論理オブジェクトが含まれます。
ColumnStoreは、ディスクからの読み取りパフォーマンスのために圧縮戦略を最適化します。解凍速度を加速するように調整されており、ディスクから読み取るときのパフォーマンス上の利点を最大化します。
MariaDB ColumnStoreは、バージョンバッファーを使用して、変更中のディスクブロックを格納し、トランザクションロールバックを管理し、データベースのMVCC(マルチバージョン同時実行制御)または「スナップショット読み取り」機能を提供します。これにより、データベースのクエリ整合性のあるビューを提供できます。
MariaDBCloumnStoreの仕組み
次に、MariaDB ColumnStoreの公式ドキュメントに従って、MariaDBColumnStoreがエンドユーザークエリを処理する方法を見てみましょう。
- クライアントは、ユーザーモジュールで実行されているMariaDBサーバーにクエリを発行します。サーバーは、要求を満たすために必要なすべてのテーブルに対してテーブル操作を実行し、最初のクエリ実行プランを取得します。
- MariaDBストレージエンジンインターフェースを使用して、ColumnStoreはサーバーテーブルオブジェクトをColumnStoreオブジェクトに変換します。これらのオブジェクトは、ユーザーモジュールプロセスに送信されます。
- ユーザーモジュールはMariaDB実行プランを変換し、指定されたオブジェクトをColumnStore実行プランに最適化します。次に、クエリを実行するために必要な手順と、それらを実行する必要がある順序を決定します。
- 次に、ユーザーモジュールはエクステントマップを参照して、必要なデータについて参照するパフォーマンスモジュールを決定し、エクステントエリミネーションを実行して、範囲外のデータのみを含むパフォーマンスモジュールをリストから削除します。クエリに必要なもの。
- 次に、ユーザーモジュールは1つ以上のパフォーマンスモジュールにコマンドを送信して、ブロックI/O操作を実行します。
- 1つまたは複数のパフォーマンスモジュールは、述語フィルタリング、結合処理、ローカルまたは外部ストレージからのデータの初期集約を実行してから、データをユーザーモジュールに送り返します。
- ユーザーモジュールは、最終的な結果セットの集計を実行し、クエリの結果セットを作成します。
- MariaDBサーバーは、結果セットに対して任意の選択リスト機能、ORDERBYおよびLIMIT操作を実行します。
- MariaDBサーバーは結果セットをクライアントに返します。
MariaDBColumnStoreのインストール方法
では、インストール方法を見てみましょう。詳細については、MariaDBの公式ドキュメントを確認してください。
オペレーティングシステムとしてCentOS7を使用しますが、代わりにサポートされている任意のOSを使用できます。インストールパッケージは、ここからダウンロードできます。
まず、追加パッケージリポジトリをインストールする必要があります:
$ 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は、このタスク用に設計された列型ストレージエンジンであり、ご覧のとおり、インストールは非常に簡単です。したがって、OLAPデータベースが必要な場合やビッグデータを処理する場合は、試してみてください。