VNPY3.0以后的版本為什么不用數(shù)據(jù)庫設(shè)計架構(gòu)?
項目地址:https://gitee.com/vnpypro/vnpy
網(wǎng)址:http://www.vnpy.cn
快速入門: https://q.vnpy.cn/comm/thread-13-1-1.html
其他參考文章
《快速入門教程》
https://q.vnpy.cn/comm/thread-13-1-1.html
《新版策略自動生成回測文件功能代碼解析》
https://q.vnpy.cn/comm/thread-22-1-1.html
《VNPY3.0以后的版本為什么不用數(shù)據(jù)庫設(shè)計架構(gòu)?》
https://q.vnpy.cn/comm/thread-21-1-1.html
《VNPY3.0行情數(shù)據(jù)調(diào)用的5種方式 》
https://q.vnpy.cn/comm/thread-24-1-1.html
《VNPY新手常見問題說明》
https://q.vnpy.cn/comm/thread-3-1-1.html
VNPY官網(wǎng)
http://www.vnpy.cn
VNTA 證券和期貨方案
http://www.vnta.cn
《用戶福利》
http://www.vnpy.cn/kaihu/
在新版VNPY3.0中,已經(jīng)徹底放棄對數(shù)據(jù)庫的支持。
不少用戶肯定會問,沒有數(shù)據(jù)庫支持,還是一個專業(yè)的量化軟件嗎?數(shù)據(jù)該如何存儲?
國內(nèi)證券和期貨軟件,比如恒生,大智慧,同花順,文華財經(jīng),金字塔均不需要用戶安裝數(shù)據(jù)庫
原因很簡單,就是數(shù)據(jù)庫太慢了。
有多慢呢?在我的單機環(huán)境下測試結(jié)果:
讀取性能:csv文件比關(guān)系型數(shù)據(jù)庫讀取速度快2個數(shù)量.
數(shù)據(jù)占用空間: csv文件只有關(guān)系型數(shù)據(jù)庫的 1/5~1/25。
NOSQL內(nèi)存數(shù)據(jù)庫也只是相對比關(guān)系型數(shù)據(jù)庫快一點而已,并沒有本質(zhì)區(qū)別。
即便是時序數(shù)據(jù)庫,性能也遠遠低于csv或hdf5文件格式。
是不是很顛覆三觀呢?
不得不提到某些鼓吹使用數(shù)據(jù)庫的量化平臺,鼓吹使用數(shù)據(jù)庫成為“割韭菜”的利器,促進了培訓(xùn)課程銷售, 而這些培訓(xùn)結(jié)構(gòu)講師本身并不是依靠量化本身盈利。
用戶目的是為了學(xué)習(xí)搭建自己的量化平臺,而培訓(xùn)結(jié)構(gòu)是為了推銷課程,這種結(jié)果導(dǎo)向不一致,會讓用戶付出更多的學(xué)習(xí)成本,反而取得更差的效果。
參考技術(shù)測試文章一:
Pandas加載CSV的速度比SQL快 - IT屋-程序員軟件開發(fā)技術(shù)分享社區(qū)?
www.it1352.com/2023780.html
與csv文件相比,將mysql表轉(zhuǎn)換為spark數(shù)據(jù)集的速度非常慢 - IT屋-程序員軟件開發(fā)技術(shù)分享社區(qū)?
www.it1352.com/959692.html
下面就來解釋一下原因。
數(shù)據(jù)庫需同時具備增、刪、改、查 功能,而我們對量化回測數(shù)據(jù)的要求是盡可能快的讀取數(shù)據(jù)
如同所示,這是csv文件格式和數(shù)據(jù)庫的特點對比。
采用csv或hdf5文件格式存儲,不僅更小的硬盤空間占用,還降低了讀寫數(shù)據(jù)IOPS的占用,
而且提高了讀取性能(大約比SQL SERVER快 2個數(shù)量級,內(nèi)存數(shù)據(jù)庫差距會稍小,但代價是更大的內(nèi)存占用),也降低了因為磁盤故障導(dǎo)致數(shù)據(jù)錯誤的可能。
量化回測時,數(shù)據(jù)是時間序列,需要連續(xù)讀取行情數(shù)據(jù)。
而數(shù)據(jù)庫通常屬于無序的文件組織方法并不是連續(xù)存放數(shù)據(jù)的,為了便于插入數(shù)據(jù),數(shù)據(jù)庫通常中間還有無數(shù)據(jù)的填充空間。
這個性能降低在單機環(huán)境下測試比直接采用csv格式文件存儲慢接近100倍。
為了方便檢索數(shù)據(jù),通常分為關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫,一種是用索引的形式,一種是用HASH表的形式,這2種形式數(shù)據(jù)都不是按順序存放的,數(shù)據(jù)和數(shù)據(jù)之間都由填充空間。
即便是時序數(shù)據(jù)庫,性能也遠遠低于csv和hdf5文件的性能,使用也更復(fù)雜。
對量化交易回測來說,對行情數(shù)據(jù)的存儲根本不需要 刪、改、查功能。
拿期貨行情數(shù)據(jù)為例,通常我需要將實時行情存儲,如果我開啟一個策略,需要計算M10 周期最近100個周期的KDJ指標(biāo),那么我只要需要最近的100X10X60X2個TICK數(shù)據(jù)即可,我只需要按時間順序讀取最近的12萬個TICK。
如果是從數(shù)據(jù)庫讀取的話,需要通過select語句或存儲過程等方式 獲得記錄集,并逐條取出,這個過程是非常耗時的
這個過程是非常耗時的,并且每條記錄之間,按默認(rèn)設(shè)置,數(shù)據(jù)庫為了便于插入數(shù)據(jù),往往在記錄之間留有空白的存儲空間,往往按默認(rèn)設(shè)置,80%的空間是無用的,也就是說,本來你只需要1M的空間你,實際占了5M的硬盤空間。事實上,你可能并沒有插入數(shù)據(jù)的請求。因為行情數(shù)據(jù)存儲都是順序的,按時間順序?qū)懭胫螅ǔ2恍枰俨迦胄碌男星閿?shù)據(jù)。
對“查”來說,也并不是逐條取得,通常是取一個時間段的數(shù)據(jù),并不是數(shù)據(jù)庫方式的 “查”數(shù)據(jù)的方式。
而且由于數(shù)據(jù)庫的IO較慢。有人說,可以用內(nèi)存數(shù)據(jù)庫啊,事實上內(nèi)存數(shù)據(jù)庫會占用大量的內(nèi)存空間,而且他的快也只是和關(guān)系型數(shù)據(jù)庫比,遠遠慢于CSV和hdf5格式。
用文件存儲是一個更好的選擇,事實上很多知名的股票軟件公司都采用文件存儲行情數(shù)據(jù)的。
比如文件存儲怎么做呢?
例如按一個規(guī)則制定:
比如rb2110的2021年6月5日的TICK行情數(shù)據(jù),就存儲在
..\data\20211005\TICK\rb2110.csv 目錄的文件下
該文件將順序存儲當(dāng)天的TICK數(shù)據(jù)。
當(dāng)我需要讀取最近3天數(shù)據(jù)的時候,就按先后分別讀取
..\data\20211005\TICK\rb2110.csv
..\data\20211006\TICK\rb2110.csv
..\data\20211007\TICK\rb2110.csv
這3個文件即可, 每個文件逐行讀取。
如果需要進一步節(jié)省硬盤存儲空間,我可以將data文件夾設(shè)置為 壓縮屬性。
在沒有設(shè)置壓縮屬性的情況下,采用文件方式存儲數(shù)據(jù)大約占用硬盤空間是采用SQL Server默認(rèn)設(shè)置的20%硬盤空間。
在設(shè)置了data文件夾的壓縮屬性的情況下,采用文件方式存儲數(shù)據(jù)大約占用硬盤空間是采用SQL Server默認(rèn)設(shè)置的4%硬盤空間。
VNPY官網(wǎng)
http://www.vnpy.cn

-
3f.png (79.65 KB, 下載次數(shù): 0)

浙公網(wǎng)安備 33010602011771號