Kdbplus-architecture

提供:Dev Guides
移動先:案内検索

KDB +アーキテクチャ

Kdb +は、膨大な量のデータを処理するために最初から設計された高性能で大容量のデータベースです。 完全に64ビットであり、組み込みのマルチコア処理とマルチスレッドを備えています。 同じアーキテクチャがリアルタイムデータと履歴データに使用されます。 データベースには独自の強力なクエリ言語* q、*が組み込まれているため、データに対して直接分析を実行できます。

*kdb + tick* は、リアルタイムデータと履歴データのキャプチャ、処理、およびクエリを可能にするアーキテクチャです。

Kdb +/tickアーキテクチャ

次の図は、一般的なKdb +/tickアーキテクチャの一般的な概要を示した後、さまざまなコンポーネントとデータのフローの簡単な説明を示しています。

KDB +アーキテクチャ

  • *データフィード*は、ほとんどがロイター、ブルームバーグなどのデータフィードプロバイダーによって、または取引所から直接提供される時系列データです。
  • 関連データを取得するために、データフィードのデータは feed handler によって解析されます。
  • フィードハンドラによってデータが解析されると、 ticker-plant に送られます。
  • 障害からデータを回復するために、ティッカープラントは最初に新しいデータをログファイルに更新/保存してから、独自のテーブルを更新します。
  • 内部テーブルとログファイルを更新した後、オンタイムループデータは、リアルタイムデータベースと、データを要求したすべてのチェーンサブスクライバーに継続的に送信/公開されます。
  • 営業日の終わりに、ログファイルが削除され、新しいログファイルが作成され、リアルタイムデータベースが履歴データベースに保存されます。 すべてのデータが履歴データベースに保存されると、リアルタイムデータベースはそのテーブルを削除します。

Kdb + Tickアーキテクチャのコンポーネント

データフィード

データフィードには、任意の市場またはその他の時系列データを使用できます。 フィードハンドラーへの生の入力としてデータフィードを検討します。 フィードは、取引所(ライブストリーミングデータ)、トムソンロイター、ブルームバーグ、またはその他の外部機関などのニュース/データプロバイダーから直接取得できます。

フィードハンドラー

フィードハンドラーは、データストリームをkdb +への書き込みに適した形式に変換します。 データフィードに接続されており、フィード固有の形式からデータを取得して、ティッカープラントプロセスに公開されるKdb +メッセージに変換します。 一般的に、フィードハンドラは、次の操作を実行するために使用されます-

  • 一連のルールに従ってデータをキャプチャします。
  • そのデータをある形式から別の形式に変換(/enrich)します。 *最新の値をキャッチします。

ティッカープラント

Ticker Plantは、KDB +アーキテクチャの最も重要なコンポーネントです。 これは、リアルタイムデータベースまたは直接サブスクライバー(クライアント)が金融データにアクセスするために接続されるティッカープラントです。* publishおよびsubscribe *メカニズムで動作します。 サブスクリプション(ライセンス)を取得すると、パブリッシャー(ティッカープラント)から(定期的に)ティックパブリケーションが定義されます。 それは次の操作を実行します-

  • フィードハンドラからデータを受け取ります。
  • ティッカープラントはデータを受信するとすぐに、コピーをログファイルとして保存し、ティッカープラントが更新を取得したら更新します。これにより、障害が発生した場合にデータが失われることはありません。
  • クライアント(リアルタイムサブスクライバー)は、ティッカープラントに直接サブスクライブできます。
  • 各営業日の終わりに、つまり、リアルタイムデータベースが最後のメッセージを受信すると、今日のすべてのデータを履歴データベースに保存し、今日のデータを購読しているすべてのサブスクライバーに同じデータをプッシュします。 次に、すべてのテーブルをリセットします。 ログファイルは、履歴データベースまたはリアルタイムデータベース(rtdb)に直接リンクされている他のサブスクライバにデータが保存されると削除されます。
  • その結果、ティッカープラント、リアルタイムデータベース、および履歴データベースは年中無休で稼働しています。

ticker-plantはKdb +アプリケーションであるため、他のKdb +データベースと同様に、 q を使用してテーブルをクエリできます。 すべてのティッカープラントクライアントは、サブスクライバーとしてのみデータベースにアクセスできます。

リアルタイムデータベース

リアルタイムデータベース(rdb)は、今日のデータを保存します。 ティッカープラントに直接接続されています。 通常、市場の時間(1日)にメモリに保存され、1日の終わりに履歴データベース(hdb)に書き込まれます。 データ(rdbデータ)はメモリに保存されるため、処理は非常に高速です。

kdb +では、1日あたりの予想データサイズの4倍以上のRAMサイズを推奨しているため、rdbで実行されるクエリは非常に高速で、優れたパフォーマンスを提供します。 リアルタイムデータベースには今日のデータのみが含まれるため、日付列(パラメーター)は不要です。

たとえば、次のようなrdbクエリを使用できます。

select from trade where sym = `ibm

OR

select from trade where sym = `ibm, price > 100

歴史的データベース

会社の推定値を計算する必要がある場合、その履歴データを利用できるようにする必要があります。 履歴データベース(hdb)は、過去に行われたトランザクションのデータを保持します。 新しい日の各レコードは、1日の終わりにhdbに追加されます。 hdbの大きなテーブルは、表示されるように保存されるか(各列が独自のファイルに保存される)、一時データによってパーティション分割されて保存されます。 また、いくつかの非常に大きなデータベースは、 par.txt (ファイル)を使用してさらにパーティション化できます。

これらのストレージ戦略(スプレイ、パーティション分割など)は、大きなテーブルからデータを検索またはアクセスする際に効率的です。

履歴データベースは、内部および外部のレポート目的、つまり分析にも使用できます。 たとえば、特定の日のIBMの企業取引を取引(または任意の)テーブル名から取得したい場合、次のようにクエリを記述する必要があります-

thisday: 2014.10.12

select from trade where date = thisday, sym =`ibm

- q 言語の概要がわかったら、このようなクエリをすべて作成します。