はじめに
見ていて面白そうだったので試験的にMEMORYストレージエンジンを使用してみました。
MEMORYストレージエンジンはメモリ上にテーブルを作成するものです。
これにより、かなり処理が高速化されます。
MySQLのインストールは終わっているものとして書いて有ります。
手順
先にheap size等の設定を行います。
これはインメモリにする上で必須の設定です。
sudo vim /etc/my.cnf
my.cnfに次の記述を追加します。
max_heap_table_size=2G tmp_table_size=2G
できたらrestartします。
sudo service mysqld restart
それが終わったらMySQLにログインして設定を行います。
set global tmp_table_size = 2147483648; set global max_heap_table_size = 2147483648;
ここまでできたらtableを作成してみます。
create table in_memory (id varchar(16), chr varchar(8), index(id)) engine=memory;
ここらへんは適当に。
load data infile "/tmp/test.csv" into table in_memory fields terminated by ',';
簡単な速度計測
tableの情報はこんな感じです。
Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length |
---|---|---|---|---|---|---|---|---|
my_isam | MyISAM | 10 | Dynamic | 39706716 | 23 | 915841192 | 281474976710655 | 536508416 |
in_memory | MEMORY | 10 | Fixed | 39706716 | 27 | 1281039008 | 1207959534 | 640502960 |
で、計測結果ですが
Name | Speed(sec) |
---|---|
my_isam | 0.04 |
in_memory | 0.00 |
正直なところ使うデータセットが悪かったので違いがわかりにくいですが、2-4倍程度の速度向上が見込めるかと思います。
最後に
サーバー再起動/クラッシュするとtableのデータが全て消えるので、実用できるかというと微妙なところですが、なかなかおもしろいと思います。