大規模な時系列データベースを構築する前に考えるべきこと
時系列データベースの保存システムは、どのように最適化されているか
保存システムの最適化を、処理にかかる時間と、保存に必要な空間の2つの観点から見ていきます。
取り込みと読み出しの時間を短縮するために、バッファードI/O、データの局所性を高める保存構造、キャッシュなどを使います。
バッファードI/Oは、パーティションごとにデータをメモリへまとめてからファイルに書き込み、取り込み速度を高めます。
Machbaseのタグテーブルは、関連するデータをまとめて配置し、検索時に必要なデータを中心に読み込みます。そのために、時刻とタグをキーとする複合索引を採用しています。
頻繁に参照するデータはメモリにキャッシュできます。負荷の大きいディスクI/Oを省くことで、応答時間を短縮します。

保存容量を抑える一般的な方法は、データを圧縮してファイルへ書き込むことです。
型を考慮せず行全体をまとめて圧縮すると、圧縮効率が下がる場合があります。また、検索で不要な列まで読み込むことになり、余分なI/Oが発生します。
列指向の保存方式は、これらの問題を改善します。
データ型ごとに適した圧縮方式を選べるため、全体の圧縮効率が高まります。検索時は必要な列だけをメモリへ読み込み、ディスクI/Oとメモリ使用量を抑えられます。
データベースの負荷をどう解消するか
EXPLAINを使い、クエリ実行に関する情報、リソースの使用状況、所要時間などを確認します。その結果からボトルネックを探し、改善策を検討します。
主な方法は、クエリの調整、データベース設定の調整、OS設定の調整、ハードウェアの増強、DBMSソフトウェア自体の改善です。
用途ごとに適したデータベースは
金融・経済:為替や株式市場の分析
金融分野は、短期的な視点と長期的な視点の両方から考える必要があります。
情報が連続して発生し、即座に分析する必要がある場面では、低遅延で処理できるインメモリデータベースが有効です。
長期的な傾向を分析するには、大量のデータを不揮発性ストレージに保持し、効率よく処理する必要があります。SQL on Hadoopなどのビッグデータ基盤は、そのための選択肢の一つです。
環境・行政・福祉:データ間の関係を分析する
レコード間の関係が重要なら、RDBMSが適しています。データ量が増えるにつれ、関係の検索に向くRDBMSと、大量データの保存・集計に向く列指向DBMSを組み合わせる構成も増えています。
比較的少量の補足情報をRDBMSに保存し、大量に発生する観測データを列指向DBMSへ保存する、ハイブリッド構成が一つの方法です。
SNS:大量で多様なデータを管理する
SNSは、利用者同士のコミュニケーション、情報共有、人脈の拡大を通じて、社会的なつながりを作るプラットフォームです。
グラフ理論では、データをノードとエッジで表します。利用者をノード、利用者間の関係をエッジとすれば、SNSのつながりを自然に表現できます。
製造業:時間の流れに沿ってデータを見る
製造業は、時系列データベースに適した分野です。自動化とともにデータ量が増え、リアルタイムの検索・分析に加えて、長期間の傾向や時間帯ごとの比較も必要になります。
従来のRDBMS、Hadoop、NoSQL、RTDBなどの構成では、こうした負荷に対応するため多くのハードウェアが必要となり、費用が増える場合があります。
時系列データベースは、この用途に合わせて設計されています。比較的少ないリソースで高い性能を得られれば、安定したシステムを低い費用で構築できます。
新しいクエリ機能は、どのような基準で追加するか
例えば、顧客から機能追加の要望があった場合、対応の可否や方法をどう判断するのでしょうか。
基本的なSQL仕様と既存のアーキテクチャに合う要望は、積極的に取り入れます。
短期間で対応できる変更は課題管理システムに登録し、次のパッチへの収録を検討します。時間のかかる機能はプロジェクトとして登録し、ロードマップ会議を経て将来の版に組み込みます。
顧客の要望から生まれた機能は、今後の使い方の記事で紹介する予定です。例えば、次のようなものがあります。
Machbaseのシーケンス列の利用
PIVOT
Machbaseでは、高速な処理を実現するために、次の開発手法を採用しています。
1つ目は、中核部分をC言語で開発していることです。
C言語ではコンパクトな実行ファイルを作れ、仮想マシンを介さずOS上で動作します。OSのAPIも直接呼び出せるため、低レベルの処理を効率よく実装できます。
メモリの確保と解放を開発者が明示的に制御でき、用途に合わせた効率化が可能です。
JavaやPythonなどは自動メモリ管理により実装しやすい一方、メモリを回収するタイミングの制御方法が異なります。Cでは、エンジン側が解放の時点をより直接的に管理できます。
2つ目は、並行処理を効率化する手法です。
一般に、並行処理のクリティカルセクションを保護するため、ロックを使います。
ロックはデータの破損を防ぎますが、競合や同期が性能低下の原因にもなります。
Machbaseでは、適切な箇所にロックを回避する手法やロックフリーのアルゴリズムを取り入れ、性能を改善してきました。
3つ目は、Machbaseの負荷に合わせた独自のメモリ管理機構です。
メモリの断片化を抑え、使用パターンに応じて柔軟に確保・解放できる構造にしています。
4つ目は、データの利用方法に適した保存構造です。
最後に、取り込み性能を最大化するため、標準ODBC仕様の範囲を超える非同期インターフェースも提供しています。
各インターフェースの詳細は、次のマニュアルを参照してください。


