Ubuntu 14.04でmemcachedを使用してNoSQLクエリをMySQLに追加する方法

前書き

MySQLでmemcachedとそのスタンドアロンサーバー実装を使用する一般的な考え方は、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-memcache-などの多くのすばらしい記事で説明されています。 on-ubuntu-14-04 [Ubuntu 14.04でMemcacheをインストールして使用する方法]。 ただし、スタンドアロンサーバーとしてのmemcachedは、MySQLクライアントアクセスレイヤーの前で仲介として機能し、情報を永続的に格納するオプションなしでメモリ内でのみ管理します。 これにより、重複したMySQLクエリの結果をキャッシュするなどのタスクに適しています。 これにより、リソースが節約され、ビジーなサイトのパフォーマンスが最適化されます。

ただし、この記事では、異なる内容について説明します。 MemcachedはMySQLプラグインとしてインストールされ、MySQLに緊密に統合されます。 通常のMySQL InnoDBテーブルで情報を直接管理するためのNoSQLスタイルのアクセスレイヤーを提供します。 これには、記事の後半で説明するように、多くの利点があります。

基本的な理解

この記事を理解するには、NoSQLとmemcachedの基本的な理解が必要です。 簡単に言うと、NoSQLはキーと値の形式の情報を処理します。 標準のSQLよりも明らかにシンプルなこのアプローチは、パフォーマンスとスケーラビリティが優れていることを示唆しています。これは、大量の情報(ビッグデータ)を扱うために特に求められています。

ただし、NoSQLの優れたパフォーマンスは、通常のSQLを置き換えるのに十分ではありません。 NoSQLは単純であるため、複雑な関係を持つ構造化データには適していません。 したがって、NoSQLはSQLの代替ではなく、SQLへの重要な追加です。

memcachedに関しては、NoSQLの一般的な実装と見なすことができます。 その名前が示すとおり、非常に高速で、優れたキャッシュメカニズムを備えています。 そのため、NoSQLスタイルを従来のMySQLに取り入れるのに最適な選択となります。

memcachedプロトコルのある程度の理解も必要です。 Memcachedは、次の部分を持つアイテムで機能します。

  • A-アイテムにアクセスするためのキーとなる英数字の値。

  • A-必須ペイロードが保持される任意のデータ。

  • A-通常、メイン値に関連する追加パラメーターの設定に使用される値。 たとえば、圧縮を使用するかどうかのフラグになります。

  • An-秒単位の有効期限。 memcachedは当初、キャッシュを考慮して設計されていたことを思い出してください。

  • A-各アイテムの一意の識別子。

前提条件

このガイドはUbuntu 14.04でテストされています。 説明されているインストールと構成は、他のOSまたはOSバージョンでも同様ですが、構成ファイルのコマンドと場所は異なる場合があります。

次のものが必要です。

  • Ubuntu 14.04の新規インストール

  • sudo特権を持つ非rootユーザー

このチュートリアルのすべてのコマンドは、非rootユーザーとして実行する必要があります。 コマンドにルートアクセスが必要な場合は、先頭に「+ sudo +」が付きます。 まだセットアップしていない場合は、このチュートリアルに従ってください:https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Ubuntu 14.04での初期サーバーセットアップ] 。

[[step-1-- installing-mysql-5-6]] === ステップ1-MySQL 5.6のインストール

MySQLのmemcachedプラグインは、MySQL 5.6.6より上のバージョンで使用できます。 これは、標準のUbuntu 14.04リポジトリからMySQLパッケージ(バージョン5.5)を使用できないことを意味します。 代わりに、次のことを行う必要があります。

  1. MySQL公式リポジトリを追加します

  2. MySQLサーバー、クライアント、ライブラリをインストールします

まず、https://dev.mysql.com/downloads/repo/apt/ [MySQL aptリポジトリページ]に移動し、Ubuntu 14.04システムにMySQLリポジトリを追加するパッケージをダウンロードします。 パッケージをDropletから直接ダウンロードできます。

wget https://dev.mysql.com/get/mysql-apt-config_0.3.5-1ubuntu14.04_all.deb

次に、 `+ dpkg +`でインストールします:

sudo dpkg -i mysql-apt-config_0.3.5-1ubuntu14.04_all.deb

上記のコマンドを実行すると、テキストモードウィザードが表示され、次の2つの質問が表示されます。

  • どのMySQL製品を構成しますか? `+ Server +`で答えます。

  • どのサーバーバージョンを受け取りますか? `+ mysql-5.6 +`で答えます。

これらの2つの質問に答えると、インストールする製品に関する最初の質問に戻ります。 選択を確定してウィザードを終了するには、一番下の選択肢である「+ Apply +」で答えます。

新しいMySQLリポジトリができたので、aptキャッシュを更新する必要があります。 Ubuntuでのインストールに使用可能なパッケージに関する情報。 したがって、MySQLのインストールを選択すると、新しいリポジトリから取得されます。 aptキャッシュを更新するには、次のコマンドを実行します。

sudo apt-get update

その後、次のコマンドを使用して、Ubuntu 14.04にMySQL 5.6をインストールする準備ができました。

sudo apt-get install mysql-server

上記のコマンドを実行すると、MySQLルート(管理者)パスワードを選択するよう求められます。 便宜上、この時点ではパスワードを設定しないことを選択でき、プロンプトが表示されたらEnterキーを押すだけです。 ただし、本番環境でこのサーバーを有効にする場合は、コマンド `+ sudo mysql_secure_installation +`を実行してMySQLインストールを保護し、ルートパスワードを設定することをお勧めします。

インストールプロセスが完了すると、コマンドラインクライアントと必要なライブラリとともにMySQLサーバー5.6がインストールされます。 次のコマンドでクライアントを起動することで確認できます:

mysql -u root

パスワードを設定する場合、次のコマンドを使用し、プロンプトが表示されたらMySQLルートパスワードを入力する必要があります。

mysql -u root -p

君は見るべきだ:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.25 MySQL Community Server (GPL)
...

MySQLモニター(クライアントターミナル)にいる間に、 `+ test`という名前の新しいデータベースを作成します。

CREATE DATABASE test;

後でテストするために、このデータベースが必要になります。

MySQLクライアントを終了するには、次のように入力します。

quit

最後に、memcachedプラグインの依存関係として、非同期イベント通知ライブラリの開発パッケージ( + libevent-dev +)もインストールする必要があります。 これを実現するには、次のコマンドを実行します。

sudo apt-get install libevent-dev

ステップ2-MySQLにmemcachedプラグインをインストールする

memcachedプラグインのインストールを準備するには、まずファイル `+ / usr / share / mysql / innodb_memcached_config.sql +`にあるクエリを実行する必要があります。 MySQLクライアントを起動します。

mysql -u root

または、パスワードを設定した場合:

mysql -u root -p

そして実行:

source /usr/share/mysql/innodb_memcached_config.sql;

これにより、データベース `+ innodb_memcache `にプラグインに必要なすべての設定が作成され、新しく作成されたデータベース ` test +`にサンプルデータが挿入されます。

その後、次のコマンドを使用して、MySQLターミナルからmemcachedプラグインのインストールを実行できます。

install plugin daemon_memcached soname "libmemcached.so";

MySQLセッションを終了します。

quit

これにより、Ubuntu 14.04のディレクトリ `+ / usr / lib / mysql / plugin / +`にあるmemcachedプラグインがインストールされます。 このファイルは、MySQLバージョン5.6以降でのみ使用可能です。

インストールが完了したら、memcachedプラグインリスナーを設定する必要があります。 memcachedプラグインに接続するために必要になります。 この目的のために、次のようなお気に入りのエディターでファイル `+ / etc / mysql / my.cnf +`を開きます。

sudo vim /etc/mysql/my.cnf

`+ [mysqld] +`行の後に、次を含む新しい行を追加します。

/etc/mysql/my.cnf

daemon_memcached_option="-p11222 -l 127.0.0.1"

上記は、ループバックIP 127.0.0.1に対してのみ有効なポート11222でmemcachedプラグインリスナーを設定します。 これは、Dropletのクライアントのみが接続できることを意味します。 IPに関する部分( + -l 127.0.0.1 +)を省略すると、新しいリスナーはどこからでも自由にアクセスできるようになります。これは深刻なセキュリティリスクです。 memcachedプラグインのセキュリティについてさらに懸念がある場合は、http://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-security.html [そのセキュリティドキュメント]を確認してください。

memcachedプラグインの新しいリスナープロセスを開始するには、次のコマンドでMySQLサーバーを再起動します。

sudo service mysql restart

ステップ3-memcachedプラグインのテスト

インストールが成功したことを確認するには、MySQLクライアントから次のMySQLコマンドを実行します(クライアントを `+ mysql -u root `または ` mysql -u root -p +`で起動します):

show plugins;

すべてが正常であれば、出力に次のように表示されます。

| daemon_memcached           |   | DAEMON             | libmemcached.so | GPL     |

これが表示されない場合は、MySQLバージョン5.6以降を使用しており、インストール手順に正確に従っていることを確認してください。

次のように、DropletからTelnetを使用して新しいmemcachedプラグインインターフェイスに接続することもできます。

telnet localhost 11222

成功すると、次のような出力が表示されます。

Connected to localhost.
Escape character is '^]'.

これで、統計のために `+ stats `などの汎用コマンドを実行して、この接続がどのように機能するかを確認できます。 プロンプトを終了するには、キーボードのCTRLと]の組み合わせを同時に押します。 その後、「 quit +」と入力して、Telnetクライアント自体を終了します。

Telnetは、memcachedプラグインとMySQLデータ自体に接続する最も簡単な方法を提供します。 テストには適していますが、プロとして使用する場合は、PHPやPythonなどの一般的なプログラミング言語ですぐに使用できるライブラリを使用する必要があります。

[[step-4 --running-nosql-queries-in-mysql-via-memcached-plugin]] === ステップ4-memcachedプラグインを介してMySQLでNoSQLクエリを実行する

この記事のmemcachedプラグインのインストール部分に戻ると、ファイル + / usr / share / mysql / innodb_memcached_config.sql +`からステートメントを実行したことがわかります。 これらのステートメントは、 `+ test`データベースに新しいテーブル + demo_test`を作成しました。 `+ demo_test +`テーブルには、memcachedプロトコルに準拠した次の列があります。

  • `+ c1 +`はフィールドを実装します。

  • `+ c2 +`はフィールドを実装します。

  • `+ c3 +`はフィールドを実装します。

  • `+ c4 +`はフィールドを実装します。

  • `+ c5 +`はフィールドを実装します。

テーブル「+ demo_test +」がテスト対象となります。 まず、次のコマンドを使用して、MySQLクライアントでデータベース/テーブルを開きます。

mysql -u root

または、MySQLパスワードが設定されている場合:

mysql -u root  -p

`+ demo_test +`テーブルにはすでに1つの行があるはずです:

SELECT * FROM demo_test;

結果は次のようになります。

+-------------+--------------+------+------+------+
| c1          | c2           | c3   | c4   | c5   |
+-------------+--------------+------+------+------+
| AA          | HELLO, HELLO |    8 |    0 |    0 |
+-------------+--------------+------+------+------+
1 rows in set (0.00 sec)

MySQLセッションを終了します。

quit

それでは、memcached NoSQLインターフェースとtelnetを使用して2番目のレコードを作成しましょう。 TCPポート11222でローカルホストに再度接続します。

telnet localhost 11222

次に、次の構文を使用します。

set [] [] [] []
[]

は新しい行にある必要があることに注意してください。 また、上記の方法で作業する場合、各レコードに対して、値の長さをバイト単位で指定する必要があります。

例として、キー「+ newkey 」、フラグの値「+0」、有効期限の値「+0 +」(有効期限なし)で新しいアイテム(データベース行)を作成しましょう。 値の長さは12バイトです。

set newkey 0 0 12
NewTestValue

もちろん、このNoSQLインターフェイスを介して値を取得することもできます。 これは、取得したいキーの名前が後に続く `+ get +`コマンドで行われます。 まだTelnetセッションにいる間に、次を入力します。

get newkey

結果は次のようになります。

VALUE newkey 0 12
NewTestValue

上記の「+ set」および「+ get」コマンドは、すべてのmemcachedサーバーに有効です。 これらは、NoSQLスタイルでレコードを挿入および取得する方法の簡単な例にすぎません。

コマンド `+ mysql -u root test `または ` mysql -u root test -p `を使用してMySQLクライアントに再度接続し、qyeryを実行して ` demo_test +`テーブルの内容をもう一度確認します。

SELECT * FROM demo_test WHERE c1="newkey";

新しく作成された行が次のように表示されます。

+--------+--------------+------+------+------+
| c1     | c2           | c3   | c4   | c5   |
+--------+--------------+------+------+------+
| newkey | NewTestValue |    0 |    1 |    0 |
+--------+--------------+------+------+------+

memcachedプラグインがどのデータベースとテーブルに接続するのか、どのように情報をテーブルの列にマップするのかを知りたいと思うかもしれません。 答えはデータベース「+ innodb memcached」とそのテーブル「+ containers」にあります。

このselectステートメントを実行します。

select * from containers \G

以下が表示されます。

*************************** 1. row ***************************
                 name: aaa
            db_schema: test
             db_table: demo_test
          key_columns: c1
        value_columns: c2
                flags: c3
           cas_column: c4
   expire_time_column: c5
unique_idx_name_on_key: PRIMARY
1 row in set (0.00 sec)

さまざまなマッピングを作成し、memcachedプラグインの高度な機能を見つける方法の詳細については、https://dev.mysql.com/doc/refman/5.6/en/innodb-memcached-internals.html [memcachedプラグインをご覧ください内部ページ]。

MySQLをmemcachedプラグインと統合する利点

上記の情報と例は、memcachedプラグインを介してMySQLとNoSQLを統合するいくつかの重要な利点の概要を示しています。

  • すべてのデータ(MySQLおよびNoSQL)を1か所に保存できます。 NoSQLデータ用の追加のソフトウェアをインストールして保守する必要はありません。

  • 強力なInnoDBストレージエンジンのおかげで、NoSQLデータのデータの永続化、リカバリ、レプリケーションが可能です。

  • 信じられないほど高速なmemcachedデータアクセスレイヤーを引き続き使用できるため、低速のMySQLクライアントで作業する場合と比較して、より多くの情報を扱うことができます。

  • NoSQLデータは、MySQLインターフェイスと構文で管理できます。 したがって、左結合などのより複雑なSQLクエリにNoSQLデータを含めることができます。

結論

この記事の終わりまでに、MySQLが提供するNoSQLデータを操作するための新しい可能性について知る必要があります。 これは、MongoDBなどの専用のNoSQLサーバーを置き換える普遍的なソリューションではありませんが、確かにメリットがあります。