WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

Ubuntu14.10にFoundationDBをインストールする

こんにちは、山内です。
このエントリーではFoundationDBのインストール手順を紹介します。

FoundationDBとは

ACID特性を完全保証するKey-Valueストアで、パフォーマンスの高さとANSI SQLをサポートしていることで最近注目されているデータベースです。

Multi-Model Database — FoundationDB
https://foundationdb.com/

同社のブログでは次のように述べられています。

驚かないでほしい。新しいバージョンのトランザクションエンジンは毎秒1,440万回のWrite性能を示した。FoundationDBは14.4MHzで動作すると言い換えてもいいだろう。 Databases at 14.4MHz DEC 10, 2014 - BY DAVE ROSENTHAL

このテストではそれなりのマシンを使っていますが、Cassandraよりパフォーマンスに優れていることに驚きです。

† EC2 c3.8xlarge(CPUコア数32、メモリ60GB)32台構成

‡ Compute Engine n1-standard-8(CPUコア数8、メモリ30GB)330台構成

FoundationDBのKey-Value StoreSQL Layerをインストールすると、Key-Value Storeに対してSQLでアクセスできるようになります。また、SQL LayerはREST APIもサポートしており、curlコマンドで次のような操作も可能です。

animals.hamstersテーブルの中からプライマリキー100のデータをGETする例:

$ curl http://localhost:8091/v1/entity/animals.hamsters/100  
  
[  
    {  
        "hamster_id": 100,   
        "hamster_name": "Winter White",  
        "birthday": "2015-01-01 10:31:29",  
    }  
]  

SQL Layerはロードバランシングも備えています。例えば複数のKey-Value StoreでClusterを構成しているときにSQL Layerは自動的に負荷の少ないノードにアクセスします。

今回は次のような環境でFoundationDBを構築していきます。
・Ubuntu 14.10
・Google Compute Engine f1-micro(14.4MHzでは動かない)

Key-Value Storeのダウンロード

はじめにKey-Valueストアをダウンロードします。
少し一手間なのですが、パッケージをインストールする前にメールアドレスを入力してdebパッケージのダウンロードURLを入手しなければなりません。

https://foundationdb.com/get#ubuntuのダウンロードボタンをクリックするとメールアドレスの入力フォームが開くので、メールアドレスを入力します。
ダイアログにも記載がありますが、アップデート情報なども送られてくるようです。

URLが記載されたメールが届いたらダウンロードします。(URLはダミーです。)

$ wget https://foundationdb.com/downloads/token/snoopy/key-value-store/3.0.6/foundationdb-server_3.0.6-1_amd64.deb  
$ wget https://foundationdb.com/downloads/token/spike/key-value-store/3.0.6/foundationdb-clients_3.0.6-1_amd64.deb  

Key-Value Storeのインストール

dpkgでクライアントとサーバーをインストールします。

$ sudo dpkg -i foundationdb-clients_3.0.6-1_amd64.deb  
  
(Reading database ... 54615 files and directories currently installed.)  
Preparing to unpack foundationdb-clients_3.0.6-1_amd64.deb ...  
Unpacking foundationdb-clients (3.0.6-1) over (3.0.6-1) ...  
Setting up foundationdb-clients (3.0.6-1) ...  
Processing triggers for libc-bin (2.19-10ubuntu2.2) ...  

$ sudo dpkg -i foundationdb-server_3.0.6-1_amd64.deb  
  
Selecting previously unselected package foundationdb-server.  
(Reading database ... 54615 files and directories currently installed.)  
Preparing to unpack foundationdb-server_3.0.6-1_amd64.deb ...  
Unpacking foundationdb-server (3.0.6-1) ...  
Setting up foundationdb-server (3.0.6-1) ...  
>>> configure new single memory  
Database created  
>>> status  
Using cluster file `/etc/foundationdb/fdb.cluster'.  
  
Unable to retrieve all status information.  
  
Configuration:  
Redundancy mode - single  
Storage engine - memory  
License - See foundationdb.com/license  
Coordinators - 1  
  
Cluster:  
FoundationDB processes - 0  
Machines - 0  
Fault Tolerance - 0 machines  
Server time - Sat Feb 7 11:40:29 2015  
  
Data:  
Replication health - (Re)initializing automatic data distribution  
Moving data - unknown (initializing)  
Sum of key-value sizes - unknown  
Disk space used - unknown  
  
Operating space:  
Unable to retrieve operating space status  
  
Workload:  
Read rate - unknown  
Write rate - 0 Hz  
Transactions started - 0 Hz  
Transactions committed - 0 Hz  
Conflict rate - 0 Hz  
  
Client time: Sat Feb 7 11:40:29 2015  
Processing triggers for ureadahead (0.100.0-16) ...  

fdbcliコマンドで対話環境に入ることができます。
statusコマンドでシステム状況を確認できます。

$ fdbcli  
Using cluster file `/etc/foundationdb/fdb.cluster'.  
  
The database is available.  
  
Welcome to the fdbcli. For help, type `help'.  
fdb> status  
Configuration:  
Redundancy mode - single  
Storage engine - memory  
License - See foundationdb.com/license  
Coordinators - 1  
  
Cluster:  
FoundationDB processes - 1  
Machines - 1  
Memory availability - 0.8 GB per process on machine with least available  
>>>>> (WARNING: 4.0 GB recommended) < <<<<  
~  

警告が出ました。4GB以上推奨のようです。

デフォルトではストレージエンジンがmemoryになっていますが、SSDに最適化されたssdに変更することもできます。

fdb> configure ssd

memoryの場合、データはメモリ上にストアされディスク上にログが置かれます。すべてのデータがメモリに無いといけないので巨大なデータベースには向きません。デフォルトでは1データが1GB以上のものはストアできない仕様になっているようですが、そのようなデータをストアする場面はそうそう無いと思いますので気にしなくて大丈夫でしょう。

memoryの特性としてはシーケンシャルな書き込み性能が高い反面、ランダムI/Oアクセスに弱いことがあります。また、再起動をかけたときディスク上のログからデータベースを再構築するためssdに比べてスタートに時間がかかります。とはいえ、要する時間は数秒から数分単位ということらしいので大きなデメリットにはならないと思います。

SQL Layerのダウンロード

Key-Valueストアのダウンロード同様に、https://foundationdb.com/layers/sql#sql-ubuntuからダウンロードURLを入手します。(URLはダミーです。)

$ wget https://foundationdb.com/downloads/token/snoopy/sql-layer/2.1.0/fdb-sql-layer_2.1.0-1_all.deb  
$ wget https://foundationdb.com/downloads/token/spike/sql-layer/2.1.0/fdb-sql-layer-client-tools_2.1.0-1_all.deb  

SQL Layerのインストール

SQLレイヤーは Java Runtime Environment (JRE) 7以降が必要なので、JREを先にインストールします。

$ sudo apt-get install default-jre  
$ sudo dpkg -i fdb-sql-layer_2.1.0-1_all.deb  
$ sudo dpkg -i fdb-sql-layer-client-tools_2.1.0-1_all.deb  

以上です。次回は、SQLでFoundationDBを操作してみたいと思います。