コバのシステムトレード構築日記(Dukascopy他)

IB証券/DukascopyとのAPI接続ナレッジや、トレステなど

シストレ向けのDatabase設計の肝(Part1: DB選択)

台風のさなか、そろそろと思い久々の投稿。

この三か月ほど若干の体調不良と、コーディングよりもDBの詳細設定を変更しつつチューニングしてました。目的はリアルタイム処理自動売買を滞りなく行うためです。

 

システムの全体構成図みたいなのはちょっとちゃんとした図がない公開しづらいので(汗)、DB周りとしてはオンプレミス環境主体(平たく言えば自宅のトレーディングルーム)として物理サーバが以下の感じです。

・Master / Slaveの 4コア2台(Master 32G / Slave 16GB) DB向け4TB IRデータ向け6TB

Javaベースのアプリケーション稼働サーバ4台(4コア16GB)

・ジョブスケジューラサーバ1台(2コアファンレス8GB)

Gatewayサーバ1台 (4コアファンレス16GB)

クラウドのサーバ1台(固定GlobalIP)

 

「DBサーバ + APサーバ + JSサーバ + Gatewayサーバ + クラウドサーバ」という感じ。今はリアルタイム処理向けに Apache Igniteベースのテスト環境を1台(4コア16GB)で開発中です。拡張用に8台スタンバってます。

お金があれば全部クラウドにしたいけどざっくり希望するスペックが月額200万円とかのオーダーになるとしばらく無理です。OSは CentOS7で、RAIDなどの構成も組んでいません。壊れたら他のサーバで代替という方式。シングルポイントになる Gatewayと ジョブスケジューラは、古いCPUだけどファンレス+SSDで壊れにくい構成にしてます。あとはすべてのサーバが Anacondaのスクリプトで30分もあれば新しいHDD環境に新規構築できるようにしています。イメージバックアップで復旧に何時間もかかるよりましです。

 

IBKR主体のDBでのデータサイズが 8/7時点で 1.5TBほどあります。

1TBを超えると何か問題が起きて構成を ALTER TABLEするだけで最悪週末2日が全部潰れます。そんな毎週末の不幸の積み重ねを徒然と記してみたいと思います。

水曜どうでしょうの新作と同じで何連投するかは謎ですが、とりあえず Part1として、ここまでの前置きと、DB選択について。

 

 

DBは MySQL/MariDB or PostgreSQLの2択が前提です。

MySQL/MariaDBからさらに2択ですが、技術的にはほぼ同じだけど、MariaDBは Mroongaとか Spider Engineとかが魅力です。

選択したときはかなり前のバージョンだったのと、JSON対応やらも必要性も感じないで、単にログ収集のバックエンドで使っていたからという理由で MySQLにしました。その後、CentOSのバンドルDBが MariaDBになったこともあり、流れはそっちだなと身を任せて今は MariaDBです。

バージョンは MariaDB 10.2以上が強く推奨です。MySQLなら5.7以上。テラバイトデータを扱うため大事な機能が10.2から追加されているのが理由。

InnoDB癖とか、金融データのパーティショニングとか、その辺の細かい話を次は続けます。