前書きMemSQLは、従来のデータベースよりも高速な読み取りと書き込みを提供できるメモリ内データベースの一種です。新しいテクノロジーであるにもかかわらず、MySQLプロトコルを使用しているため、操作に非常に馴染みがあります。MemSQLは、JSONサポートやデータの挿入機能などの最新機能を備えたMySQLの最新機能を採用しています。呼ばれる複数のノードに分割できることです。これにより、読み取りクエリが大幅に高速化されます。14.04サーバーにMemSQLをインストールし、パフォーマンスベンチマークを実行し、コマンドラインMySQLクライアントを介してJSONデータを挿入します。前提条件このチュートリアルを実行するには、次のものが必要です。x64ドロップレット1つUbuntuでの初期サーバーセットアップに従って設定できる、sudo特権を持つ非ルートユーザー14.04]チュートリアルステップ1-MemSQLのインストールこのセクションでは、MemSQLをインストールするための作業環境を準備します。[ダウンロードページ]にリストされています。Opsをダウンロードしてインストールします。これは、MemSQLを正しく実行するためのサーバーのダウンロードと準備を管理するプログラムです。Opsの最新バージョンは4.0.35です。MemSQLのインストールパッケージファイルをWebサイトからダウンロードします。http://download.memsql.com/memsql-ops-4.0.35/memsql-ops-4.0.35.tar.gz次に、パッケージを抽出します。+`というフォルダーが作成されます。フォルダー名にはバージョン番号があるため、このチュートリアルで指定したものより新しいバージョンをダウンロードすると、ダウンロードしたバージョンのフォルダーが作成されます。ディレクトリをこのフォルダーに変更します。memsql-ops-4.0.35次に、抽出したインストールパッケージの一部であるインストールスクリプトを実行します。./install.shスクリプトからの出力が表示されます。すると、このホストのみにMemSQLをインストールするかどうかを尋ねられます。将来のチュートリアルでは、複数のマシンにMemSQLをインストールする方法を検討します。*と入力して「はい」と言います。上記のログから、MemSQLが2回インストールされていることがわかります。MemSQLは、アグリゲーターノードとリーフノードの2つの異なるロールとして実行できます。MemSQLが2回インストールされた理由は、クラスターが動作するために少なくとも1つのアグリゲーターノードと少なくとも1つのリーフノードが必要だからです。node_は、MemSQLへのインターフェースです。外の世界から見ると、MySQLによく似ています。同じポートでリッスンし、MySQLおよび標準のMySQLライブラリと通信することを期待するツールを接続できます。アグリゲーターの仕事は、すべてのMemSQLリーフノードを把握し、MySQLクライアントを処理し、クエリをMemSQLに変換することです。node_は実際にデータを保存します。リーフノードは、アグリゲーターノードからデータの読み取りまたは書き込み要求を受信すると、そのクエリを実行し、結果をアグリゲーターノードに返します。MemSQLを使用すると、複数のホスト間でデータを共有でき、各リーフノードにはそのデータの一部が含まれます。(単一のリーフノードであっても、データはそのリーフノード内で分割されます。)複数のリーフノードがある場合、アグリゲーターはMySQLクエリをそのクエリに関与するすべてのリーフノードに変換する責任があります。次に、すべてのリーフノードからの応答を取得し、結果を1つのクエリに集約して、MySQLクライアントに返します。これが並列クエリの管理方法です。単一ホストのセットアップでは、アグリゲーターとリーフノードが同じマシンで実行されていますが、他の多くのマシンにさらに多くのリーフノードを追加できます。Opsツールを使用して、MemSQLがどれだけ速く動作するかを見てみましょう。Opsツールを使用すると、クラスターの概要を確認できます。マスターアグリゲーターとリーフノードの2つのMemSQLノードがあります。単一マシンのMemSQLノードで速度テストを行ってみましょう。左側のメニューから[速度テスト]をクリックし、[テストの開始]をクリックします。表示される結果の例を次に示します。14.04ノード(1つのアグリゲーターノードと2つのリーフノード)があるMemSQLクラスターのベンチマークを次に示します。[img]リーフノードの数を2倍にすることで、挿入率をほぼ2倍にすることができました。*セクションを見ると、3ノードクラスターが、同じ時間内に単一ノードクラスターよりも12M多くの行を同時に読み取ることができたことがわかります。ステップ3-mysql-clientを介してMemSQLと対話するクライアントにとって、MemSQLはMySQLのように見えます。どちらも同じプロトコルを話します。MemSQLクラスターとの対話を開始するには、mysqlクライアントをインストールしましょう。最初に、次のステップで最新のクライアントをインストールするようにaptを更新します。update次に、MySQLクライアントをインストールします。mysql`コマンドが提供されます。mysql-client-core-5.6これで、MySQLクライアントを使用してMemSQLに接続する準備が整いました。+(ローカルホストIPアドレス)に接続します。+」にカスタマイズします。+`プロンプトが表示されます。データベースをリストしましょう。databases;この出力が表示されます。*という新しいデータベースを作成します。+」コマンドで新しいデータベースの使用に切り替えます。in`テーブルを作成します。これら2つのフィールドのタイプを指定する必要があります。idをbigintにして、長さ255のvarcharをメールで送信しましょう。+」フィールドをnullにできないことを伝えます。null);その最後のコマンドの実行時間が短い(15〜20秒)ことがあります。MemSQLがこの新しいテーブルの作成に時間がかかる主な理由は、コード生成です。generation_を使用してクエリを実行します。これは、新しいタイプのクエリが検出されるたびに、MemSQLがクエリを表すコードを生成およびコンパイルする必要があることを意味します。このコードは、実行のためにクラスターに送られます。これにより、実際のデータの処理が高速化されますが、準備に費用がかかります。MemSQLは、事前に生成されたクエリを再利用するためにできることを行いますが、構造がまだ確認されていない新しいクエリの速度は低下します。usersテーブルに戻って、テーブル定義を見てください。sec)それでは、いくつかのサンプルメールをユーザーテーブルに挿入しましょう。この構文は、MySQLデータベースに使用するものと同じです。0ここで、ユーザーテーブルをクエリします。users;入力したデータを確認できます。sec)ステップ4-JSONの挿入とクエリMemSQLはJSON型を提供するため、このステップでは、着信イベントを利用するためのイベントテーブルを作成します。on`フィールドがあります。null);いくつかのイベントを挿入しましょう。+」フィールドを参照します。protected]"}');これで、挿入したイベントを確認できます。email」であるすべてのイベントをクエリできます。email」というテキストであるものを見つけてください。sec)この最新のクエリは、前のクエリよりもはるかに高速に実行されました。これは、クエリ内のパラメーターのみを変更したため、MemSQLはコード生成をスキップできたためです。分散SQLデータベースについて高度なことをしましょう。結合の1つの値がJSON値内にネストされているが、異なるJSON値でフィルター処理される非プライマリキーで2つのテーブルを結合しましょう。email」である一致する電子メールを要求します。sec)次に、同じクエリを試しますが、「送信メール」イベントのみにフィルターをかけます。sec)前と同様に、2番目のクエリは最初のクエリよりもはるかに高速でした。ベンチマークで見たように、数百万行以上を実行するとコード生成のメリットが得られます。JSONを理解し、テーブル間で任意に参加する方法を理解するスケールアウトSQLデータベースを使用する柔軟性は、強力なユーザー機能です。結論MemSQLをインストールし、ノードのパフォーマンスのベンチマークを実行し、標準のMySQLクライアントを介してノードと対話し、MySQLにはないいくつかの高度な機能を試しました。これは、インメモリSQLデータベースができることの良い味です。MemSQLが実際にデータを分散する方法、パフォーマンスを最大化するためにテーブルを構造化する方法、複数のノードにMemSQLを拡張する方法、高可用性のためにデータをレプリケートする方法、MemSQLを保護する方法について学ぶことはまだたくさんあります。