MySQL HandlerSocket Plugin の簡単な使用方法
[最終更新] (2019/06/03 00:47:36)
最近の投稿
注目の記事

概要

HandlerSocket は MySQL プロセス内のスレッドとして動作する、MySQL の NoSQL フロントエンドです。独自のプロトコルを用いて TCP 通信を行います。SQL 構文の解析が不要、プロトコルがシンプルなどの理由によって、単純な DB アクセスが高速に実行可能になります。MariaDB であれば標準プラグインとして付属するためビルドせずに使用できます。ここでは MySQL プラグインとしての HandlerSocket の使用方法について記載しています。

前準備

HandlerSocket は MySQL プラグインですので MySQL 本体のインストールが事前に必要です。ただし yum などでバイナリだけをインストールするのではなく、対応したソースコードも必要です。こちらのページを参考にしてインストールしてください。

ダウンロード

$ git clone https://github.com/DeNA/HandlerSocket-Plugin-for-MySQL.git

インストール

こちらを参考にインストールします。

必要なソフトウェアのインストール

$ sudo yum install libtool

ビルド

こちらのページを参考にした場合は以下のようになります。

$ ./autogen.sh
$ ./configure --with-mysql-source=/usr/local/src/mysql-5.6.25 \
--with-mysql-bindir=/usr/local/mysql-5.6.25/bin \
--with-mysql-plugindir=/usr/local/mysql-5.6.25/lib/plugin
$ make
$ sudo make install

初期設定

/etc/my.cnf

以下の内容を /etc/my.cnf の [mysqld] セクションに追記します。オプションの意味はこちらを参考にします。

loose_handlersocket_port = 9998
loose_handlersocket_port_wr = 9999
loose_handlersocket_threads = 16
loose_handlersocket_threads_wr = 1
open_files_limit = 65535

プラグインのインストール

mysql> install plugin handlersocket soname 'handlersocket.so';

インストールされたことを確認

mysql> show processlist;

クライアントからの利用例 (Java)

Java の HandlerSocket クライアント hs4j を利用する例を記載します。

Maven の設定

こちらのページを参考に Maven 3 のインストールおよびプロジェクトテンプレートの作成を行います。インストール時には yum などによる JDK のインストールおよび JAVA_HOME の設定が必要なことに注意してください。

$ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

POM ファイルの編集

hs4j および hs4j が依存する Logback のための pom.xml 設定を行います。Apache Maven Shade Plugin を利用して、単体で実行可能な全部入りの JAR を作成してみます。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- これを追加↓ -->
    <dependency>
      <groupId>com.googlecode.hs4j</groupId>
      <artifactId>hs4j</artifactId>
      <version>0.1</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.1.3</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.12</version>
    </dependency>
    <!-- ↑これを追加 -->
  </dependencies>
  <!-- これを追加↓ -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <!-- put your configurations here -->
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <manifestEntries>
                <Main-Class>com.mycompany.app.App</Main-Class>
              </manifestEntries>
            </transformer>
          </transformers>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <!-- ↑これを追加 -->
</project>

データベース側の設定

mysql> create database mydatabase;
mysql> use mydatabase;
mysql> create table mytable (id varchar(255) primary key, str_val varchar(255), int_val int);
mysql> show create table mytable\G

ソースコードの編集

この続きが気になる方は

MySQL HandlerSocket Plugin の簡単な使用方法

残り文字数は全体の約 29 %
tybot
100 円
関連ページ
    概要 MySQL の InnoDB ストレージエンジンに直接 memcached プロトコルで高速にアクセスするためのプラグインが存在します。仕組みはこちらで紹介した MySQL HandlerSocket Plugin と似ています。図解した公式ページはこちらです。MySQL 5.6 を対象として簡単に使い方をまとめます。