FXボーグ | テクニカル実験室

テクニカル分析を使った自動売買プログラムの開発に挑戦!

スポンサーリンク

数値データ専用の時系列データーベース「Akumuli」の導入

最近は時系列DBや分散ストリーム処理エンジンが流行ってるそうです。IoTのセンサー情報の収集や巨大サービスのバックエンドとして成長しているみたいですが、トレーディングシステムとの相性も良さそうです。

とりあえずティックデータの収集に向きそうなものを探してみたのですが、分散マシン向けのDBが多く、今使っているVPS(Digital Ocean)ではちょっと厳しそうでした。

・・・さらにググってみると、こちらの「Awesome Time Series Database」 にある「Akumuri(アキュームリー)」だと1台のマシンでも十分なスループットが出せるとのことです。

 なぜAkumuli がスタンドアロンなのか?

最新のバージョンではマルチコアにも対応して、スタンドアロンにこだわっている訳では無さそうですが、2年前の記事「Why Akumuli is a Standalon Database?」では、なぜAkumuliがスタンドアロンで実装されているのかについて、このように書かれています。

1.最新のハードウェアは、時系列データを大規模に扱うことができます。時系列データはシーケンシャルであり、ハードウェアはランダムな書き込みと読み出しを気にする必要はありません。プリフェッチが最も効果的です。すべてのハードウェアリソース(ディスク/ RAM書き込みスループット)を100%利用できます。

2.時系列データ型のようなものはありません!不規則な(または未加工の)時系列、規則的(PAA変換後の不規則な時系列)、SAX化された時系列データ、周波数領域の時系列データなど、多くの異なる時系列タイプがあります。

3.このすべてのデータ型に同じ記憶域メカニズムを使用することはできません。生の時系列データに最も適しているのはログ構造のストレージだけです。SAX変換時系列に最適なのは、圧縮された逆インデックスです(少なくとも場合によっては)。PAA変換された時系列のベストフィットは、メモリ常駐キー値ストアなどです。

4.実際の書き込み負荷は通常非常に小さいので(#1を参照)、自動スケーリングはまったく必要ありません。

5.本当に必要なのは、複製(耐障害性)です。

http://akumuli.org/akumuli/2015/10/12/standalone/ より引用+機械翻訳)

 Akumuliのインストール

サイトの説明によると将来的にはWindowsに対応する予定のようですが、今のところLinuxのみのようです。まずはVPS上の Ubunt16.04 LTS x86_64 にインストールしてみましたが、本家の「Getting Started」のとおりに行ったところ残念ながら失敗しました。

さらにGitHub上のやりとり等を調べていると上記リンクに対処方法があったので、そちらを試すと上手くいきました。以下がその手順になります。

ソースを取得してそのフォルダに入る
root@ubuntu:/usr/local/src# wget https://github.com/akumuli/Akumuli/archive/master.zip
root@ubuntu:/usr/local/src# unzip master.zip
root@ubuntu:/usr/local/src# ls
Akumuli-master  master.zip

root@ubuntu:/usr/local/src# cd Akumuli-master
root@ubuntu:/usr/local/src/Akumuli-master# 

依存するパッケージを導入する。
root@ubuntu:/usr/local/src/Akumuli-master# ./prerequisites.sh 

liblog4cxx-dev だけは入らないので追加する
root@ubuntu:/usr/local/src/Akumuli-master# apt-get install liblog4cxx-dev

ビルド&インストール
root@ubuntu:/usr/local/src/Akumuli-master# cmake
root@ubuntu:/usr/local/src/Akumuli-master# make -j4
root@ubuntu:/usr/local/src/Akumuli-master# make install

※ビルドがメモリ不足で失敗する場合はスワップ領域を2GB程度追加するとうまくいくようです。(参考:How To Add Swap Space on Ubuntu 16.04 | DigitalOcean

AkumuliDBの初期化と起動 

 Akumuliは非root ユーザーでも起動できるので、任意のユーザーでDBを初期化してサービスを起動します。

log4jcxxの設定ファイルの作成(内容は適当です。)
akumuli@ubuntu:~$ cat log4j.properties 
# logger
log4j.rootLogger=DEBUG, console
log4j.logger.xxx=DEBUG, console

# console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-5p-%c] %m%n

データベースの初期化と作成
akumuli@ubuntu:~$ akumulid --init
akumuli@ubuntu:~$ akumulid --create

サービスの起動
akumuli@ubuntu:~$ akumulid
OK HTTP server started, port: 8181
OK TCP server started, RESP port: 8282, OpenTSDB port: 4242
OK UDP server started, port: 8383

これでAkumuliの導入は完了です。 

最後に

今回は数値データに特化した時系列データベースのAkumuliの導入を行いましたが、機会があれば「Apache Flink」や「Kafka」なども触ってみたいと思いました。次回はMT4から実際にティックデータを流してみようと思います。