小 T 導讀:同心源(三亞)基金管理有限公司是一家致力于采取科學方法,在二級市場進行投資的私募公司。公司的團隊成員均來自于國內(nèi)外優(yōu)秀大學,創(chuàng)始人具有計算機博士學位,有多年的算法研究、軟件系統(tǒng)開發(fā)的經(jīng)驗。
從我司的業(yè)務模式出發(fā),業(yè)務人員主要通過數(shù)據(jù)挖掘和自動模式識別這兩種方式來發(fā)現(xiàn)市場的交易規(guī)律。因此,我們的工作場景是基于大量的金融數(shù)據(jù)之上的,主要包括如下幾類:
- 國內(nèi)期貨市場的實時高頻數(shù)據(jù),逐筆數(shù)據(jù)等
- 國內(nèi)期貨市場的歷史高頻數(shù)據(jù),逐筆數(shù)據(jù)
- 國內(nèi)股票市場的高頻數(shù)據(jù),逐筆數(shù)據(jù)等
- 國內(nèi)股票市場的歷史高頻數(shù)據(jù),逐筆數(shù)據(jù)
- 依據(jù)以上數(shù)據(jù)產(chǎn)生的更大量級衍生數(shù)據(jù)
經(jīng)過多年發(fā)展,股票市場數(shù)據(jù)量十分龐大,隨著每日新數(shù)據(jù)的清洗寫入,總量變得更加水漲船高。對于十幾TB的數(shù)據(jù)量,單是進行存儲已經(jīng)不易,如果還要對數(shù)據(jù)進行查詢下載等操作,更是難上加難。這些問題橫亙眼前,也讓我們對市面上的主流數(shù)據(jù)庫逐漸喪失信心。
后來,經(jīng)過專業(yè)人士的引薦,我們嘗試了TDengine Database,沒想到它輕輕松松地就適配了我們的當前業(yè)務。
具體實踐與落地效果
選好數(shù)據(jù)庫之后我們馬上開始了搭建,并選擇了當時最新的2.1.3.2的版本部署落地,不同數(shù)據(jù)種類對應的數(shù)據(jù)庫分別如下:
1)股票高頻數(shù)據(jù)庫,包括股票市場的歷史數(shù)據(jù)+每日新增數(shù)據(jù):
這類數(shù)據(jù)每日通過Python連接器的方式,在收盤后批量導入再做分析。其中每個表代表一個股票,共85列,以Float數(shù)據(jù)為主,共32311張。



根據(jù)上述表結構計算,當前情況每行大概有408字節(jié)的長度,然后我們用腳本對所有表進行了行數(shù)查詢,大概是320億行。
以上述數(shù)據(jù)為基礎對入庫的總數(shù)據(jù)量進行下估算,粗略計算為408*320億行,大概12TB左右,后面經(jīng)過統(tǒng)計最終實際占用磁盤空間卻只有2T左右,這令我們十分震驚——壓縮率高達16.7%。

眾所周知,Float類型的數(shù)據(jù)壓縮一直是數(shù)據(jù)庫領域的一個難題,尤其是對于行式存儲的數(shù)據(jù)庫更是困難,高興之余也非常感謝TDengine的列式存儲,幫助我們完美解決了這個棘手的問題。
之后從官方人員處我們得知,在后續(xù)版本中,TDengine還對浮點類型數(shù)據(jù)做了更進一步的算法優(yōu)化,壓縮率還能獲得大幅提升。只不過目前需要手動編譯,具體操作方式可以聯(lián)系官方人員。
2)期貨庫:
期貨庫是部署在另一個服務器上的,有如下三個:期貨高頻數(shù)據(jù)庫、期貨X頻率數(shù)據(jù)庫、期貨Y頻率數(shù)據(jù)庫。他們分別代表著國內(nèi)全部期貨的高頻數(shù)據(jù)和不同時間頻率的聚合數(shù)據(jù):
- 期貨高頻數(shù)據(jù)庫:實時記錄交易所發(fā)送的tick數(shù)據(jù)
- 期貨X頻率數(shù)據(jù)庫:根據(jù)時間周期X設定,記錄聚合后的數(shù)據(jù)
- 期貨Y頻率數(shù)據(jù)庫:根據(jù)時間周期Y設定,記錄聚合后的數(shù)據(jù)
以上三個庫分別包含3351、5315、5208張子表,與股票庫一樣,它們同樣包括長期的歷史數(shù)據(jù)以及實時數(shù)據(jù)。
具體的表結構如下所示:

在查詢方面,由于當前我們的查詢只是針對單表進行,因此邏輯比較簡單,代碼如下:

此外,由于期貨不存在連續(xù)多年的行情,所以對于長期的數(shù)據(jù)展示,我們選擇用多段的每X個月數(shù)據(jù)進行拼接,查詢效率非???。例如:在TDengine客戶端服務器使用Python從服務端拉取連續(xù)兩個月的期貨行情數(shù)據(jù),耗時僅需0.16秒。

下圖為因子1在期貨菜粕上的收益曲線,從這張圖中我們也可以看出,一些其他常用的函數(shù)比如max、last,基于TDengine的緩存等技術也都實現(xiàn)了毫秒級返回數(shù)據(jù)。

從“兩點問題”到深入合作
細心的讀者可能也留意到了文章中的兩個小問題:
- 為什么我們在估算原數(shù)據(jù)量時,是通過腳本來統(tǒng)計所有子表行數(shù),再將其乘以單行字節(jié),而不是直接通過TDengine的“超級表”?
- 又為什么在文章開頭的數(shù)據(jù)分類描述中,1-4條都在后文中都看到了實際對應的數(shù)據(jù)庫,但是唯獨沒有出現(xiàn)第5條——依據(jù)以上數(shù)據(jù)產(chǎn)生的大量衍生數(shù)據(jù)?
其實是這樣,由于項目初期沒有多表聚合查詢的需求,外加為了降低數(shù)據(jù)遷移的復雜度,因此在環(huán)境搭建初期時我們并沒有選擇超級表。
但是隨著業(yè)務的不斷完善,我們將會需要更大量的數(shù)據(jù)來做更復雜的分析,這也就出現(xiàn)了第5條的數(shù)據(jù)種類——依據(jù)以上數(shù)據(jù)產(chǎn)生的更大量級衍生數(shù)據(jù)。所以說,這部分數(shù)據(jù)將來源于我們后面的待上線業(yè)務中。
屆時,我們將會更深入地用到TDengine Database的其他核心特性,如超級表、眾多計算函數(shù)等等。但僅就當下而言,TDengine強大的存儲能力和快速查詢已經(jīng)非常令我們驚喜,也讓我們對未來更加深入的合作充滿期待。
關于作者:
劉健,北京航空航天大學模式識別專業(yè)碩士學歷,曾經(jīng)供職于中國航天科技集團從事軟件研發(fā)工作。2014年與朋友一起創(chuàng)業(yè)從事外匯、期貨、股票ETF的自動交易至今。著重致力于通過數(shù)據(jù)挖掘、自動模式識別等方式在國內(nèi)二級市場中進行自動量化交易。



互聯(lián)網(wǎng).png)



-1.png)












伙伴.png)



