KDB+ 架構



Kdb+ 是一款高效能、高容量資料庫,從一開始就設計用於處理海量資料。它完全是 64 位的,並且內建了多核處理和多執行緒功能。相同的架構用於即時和歷史資料。該資料庫包含其自身強大的查詢語言 q,因此可以直接在資料上執行分析。

kdb+tick 是一種允許捕獲、處理和查詢即時和歷史資料的架構。

Kdb+/tick 架構

下圖提供了典型 Kdb+/tick 架構的概覽,隨後簡要解釋了各個元件和資料流。

KDB+ Architecture
  • 資料饋送 是時間序列資料,主要由資料饋送提供商(如路透社、彭博社或交易所)提供。

  • 為了獲取相關資料,資料饋送中的資料會被饋送處理器解析。

  • 饋送處理器解析資料後,資料會發送到行情引擎

  • 為了從任何故障中恢復資料,行情引擎首先將新資料更新/儲存到日誌檔案中,然後更新其自身的表格。

  • 更新內部表格和日誌檔案後,即時迴圈資料會持續傳送/釋出到即時資料庫以及所有請求資料的鏈式訂閱者。

  • 在每個營業日結束時,日誌檔案會被刪除,建立一個新的日誌檔案,並將即時資料庫儲存到歷史資料庫中。將所有資料儲存到歷史資料庫後,即時資料庫會清除其表格。

Kdb+ Tick 架構的元件

資料饋送

資料饋送可以是任何市場或其他時間序列資料。將資料饋送視為饋送處理器的原始輸入。饋送可以來自交易所(即時資料流)、湯森路透、彭博社等新聞/資料提供商或任何其他外部機構。

饋送處理器

饋送處理器將資料流轉換為適合寫入 kdb+ 的格式。它連線到資料饋送,並從饋送特定格式中檢索和轉換資料,轉換為 Kdb+ 訊息,並將其釋出到行情引擎程序。通常,饋送處理器用於執行以下操作:

  • 根據一組規則捕獲資料。
  • 將資料從一種格式轉換為另一種格式(/豐富)。
  • 捕獲最新值。

行情引擎

行情引擎是 KDB+ 架構中最重要的元件。它是行情引擎,即時資料庫或直接訂閱者(客戶端)連線到它以訪問財務資料。它以釋出-訂閱機制執行。一旦您獲得訂閱(許可證),就會定義來自發布者(行情引擎)的滴答(例行)釋出。它執行以下操作:

  • 接收來自饋送處理器的數

  • 行情引擎接收資料後,立即將其副本儲存為日誌檔案,並在行情引擎獲取任何更新時更新它,以便在發生任何故障時,我們不會丟失任何資料。

  • 客戶端(即時訂閱者)可以直接訂閱行情引擎。

  • 每個營業日結束時,即即時資料庫收到最後一條訊息後,它會將當天所有資料儲存到歷史資料庫中,並將相同的資料推送到所有訂閱了當天資料的訂閱者。然後它重置所有表格。一旦資料儲存到歷史資料庫或其他直接連結到即時資料庫 (rtdb) 的訂閱者中,日誌檔案也會被刪除。

  • 因此,行情引擎、即時資料庫和歷史資料庫都以 24/7 方式執行。

由於行情引擎是一個 Kdb+ 應用程式,因此可以使用 q 查詢其表格,就像任何其他 Kdb+ 資料庫一樣。所有行情引擎客戶端都應該只能作為訂閱者訪問資料庫。

即時資料庫

即時資料庫 (rdb) 儲存當天資料。它直接連線到行情引擎。通常,它會在交易時段(一天)儲存在記憶體中,並在一天結束時寫入歷史資料庫 (hdb)。由於資料(rdb 資料)儲存在記憶體中,因此處理速度極快。

由於 kdb+ 建議 RAM 大小應為每天預期資料大小的四倍或更多,因此在 rdb 上執行的查詢速度非常快,並且提供卓越的效能。由於即時資料庫僅包含當天資料,因此不需要日期列(引數)。

例如,我們可以執行以下 rdb 查詢:

select from trade where sym = `ibm

OR

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

歷史資料庫

如果我們需要計算公司的估值,則需要其歷史資料可用。歷史資料庫 (hdb) 儲存過去交易的資料。每天的新記錄都會在一天結束時新增到 hdb 中。hdb 中的大型表格要麼以展開方式儲存(每列儲存在其自己的檔案中),要麼按時間資料進行分割槽儲存。此外,一些非常大的資料庫可以透過 par.txt(檔案)進一步分割槽。

這些儲存策略(展開、分割槽等)在從大型表格中搜索或訪問資料時非常有效。

歷史資料庫也可用於內部和外部報告目的,即用於分析。例如,假設我們想從交易(或任何)表名中獲取 IBM 公司在特定日期的交易,我們需要編寫如下查詢:

thisday: 2014.10.12

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

注意 - 一旦我們對 q 語言有所瞭解,我們將編寫所有此類查詢。

廣告