- KDB+ 教程
- KDB+ - 首頁
- Q 程式語言
- Q 程式語言
- Q 語言 - 型別轉換
- Q 語言 - 時間資料
- Q 語言 - 列表
- Q 語言 - 索引
- Q 語言 - 字典
- Q 語言 - 表格
- Q 語言 - 動詞 & 副詞
- Q 語言 - 連線
- Q 語言 - 函式
- Q 語言 - 內建函式
- Q 語言 - 查詢
- Q - 程序間通訊
- Q - 訊息處理器(.Z 庫)
- KDB+ 有用資源
- KDB+ - 快速指南
- KDB+ - 有用資源
- KDB+ - 討論
KDB+ 架構
Kdb+ 是一款高效能、高容量資料庫,從一開始就設計用於處理海量資料。它完全是 64 位的,並且內建了多核處理和多執行緒功能。相同的架構用於即時和歷史資料。該資料庫包含其自身強大的查詢語言 q,因此可以直接在資料上執行分析。
kdb+tick 是一種允許捕獲、處理和查詢即時和歷史資料的架構。
Kdb+/tick 架構
下圖提供了典型 Kdb+/tick 架構的概覽,隨後簡要解釋了各個元件和資料流。
資料饋送 是時間序列資料,主要由資料饋送提供商(如路透社、彭博社或交易所)提供。
為了獲取相關資料,資料饋送中的資料會被饋送處理器解析。
饋送處理器解析資料後,資料會發送到行情引擎。
為了從任何故障中恢復資料,行情引擎首先將新資料更新/儲存到日誌檔案中,然後更新其自身的表格。
更新內部表格和日誌檔案後,即時迴圈資料會持續傳送/釋出到即時資料庫以及所有請求資料的鏈式訂閱者。
在每個營業日結束時,日誌檔案會被刪除,建立一個新的日誌檔案,並將即時資料庫儲存到歷史資料庫中。將所有資料儲存到歷史資料庫後,即時資料庫會清除其表格。
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 語言有所瞭解,我們將編寫所有此類查詢。