<sup id="ikkqm"></sup>
<rt id="ikkqm"></rt>
<acronym id="ikkqm"><center id="ikkqm"></center></acronym><acronym id="ikkqm"></acronym>
新來朋友
查看: 91|回復: 0
打印 上一主題 下一主題

VNPY3.0以后的版本為什么不用數據庫設計架構?

[復制鏈接]

20

主題

26

帖子

116

積分

管理員

Rank: 9Rank: 9Rank: 9

積分
116

IP 編輯 禁止 帖子 清理

跳轉到指定樓層
樓主
項目地址:https://gitee.com/vnpycn/vnpy
網址:http://www.gencbio.com
快速入門: https://q.vnpy.cn/comm/thread-13-1-1.html





在新版VNPY3.0中,已經徹底放棄對數據庫的支持。

不少用戶肯定會問,沒有數據庫支持,還是一個專業的量化軟件嗎?數據該如何存儲?

國內證券和期貨軟件,比如恒生,大智慧,同花順,文華財經,金字塔均不需要用戶安裝數據庫

原因很簡單,就是數據庫太慢了。


有多慢呢?在我的單機環境下測試結果:


讀取性能:csv文件比關系型數據庫讀取速度快2個數量.

數據占用空間: csv文件只有關系型數據庫的 1/5~1/25。



NOSQL內存數據庫也只是相對比關系型數據庫快一點而已,并沒有本質區別。


即便是時序數據庫,性能也遠遠低于csv或hdf5文件格式。

是不是很顛覆三觀呢?


不得不提到某些鼓吹使用數據庫的量化平臺,鼓吹使用數據庫成為“割韭菜”的利器,促進了培訓課程銷售, 而這些培訓結構講師本身并不是依靠量化本身盈利。


用戶目的是為了學習搭建自己的量化平臺,而培訓結構是為了推銷課程,這種結果導向不一致,會讓用戶付出更多的學習成本,反而取得更差的效果。



參考技術測試文章一:
這是pandas讀取csv和postgre,快10倍,這個測試因為是python,差距減小。
(如果要客觀的測試,就應該采用C++讀取csv和讀數據庫進行比較,而不做任何冗余的轉換流程,這樣既可以更精確的反映csv相對于數據庫的性能,據我們的測試結果比該參考技術測試文章的15~20倍的性能差距還要顯著增加)
《Pandas加載CSV的速度比SQL快 - IT屋-程序員軟件開發技術分享社區 》
Pandas加載CSV的速度比SQL快 - IT屋-程序員軟件開發技術分享社區?
www.it1352.com/2023780.html



參考技術測試文章二:
結論:這個測試csv比mysql快20倍,因為涉及spark轉換時間,所以只差20倍,如果忽視spanrk轉換,應該接近我說的2個數量級,csv比mysql性能優勢還要增加。
(如果要客觀的測試,就應該采用C++讀取csv和讀數據庫進行比較,而不做任何冗余的轉換流程,這樣既可以更精確的反映csv相對于數據庫的性能,據我們的測試結果比該參考技術測試文章的15~20倍的性能差距還要顯著增加)
與csv文件相比,將mysql表轉換為spark數據集的速度非常慢 - IT屋-程序員軟件開發技術分享社區?
www.it1352.com/959692.html






下面就來解釋一下原因。

數據庫需同時具備增、刪、改、查 功能,而我們對量化回測數據的要求是盡可能快的讀取數據

如同所示,這是csv文件格式和數據庫的特點對比。

采用csv或hdf5文件格式存儲,不僅更小的硬盤空間占用,還降低了讀寫數據IOPS的占用,
而且提高了讀取性能(大約比SQL SERVER快 2個數量級,內存數據庫差距會稍小,但代價是更大的內存占用),也降低了因為磁盤故障導致數據錯誤的可能。



量化回測時,數據是時間序列,需要連續讀取行情數據。


而數據庫通常屬于無序的文件組織方法并不是連續存放數據的,為了便于插入數據,數據庫通常中間還有無數據的填充空間。

這個性能降低在單機環境下測試比直接采用csv格式文件存儲慢接近100倍。




為了方便檢索數據,通常分為關系型數據庫和非關系型數據庫,一種是用索引的形式,一種是用HASH表的形式,這2種形式數據都不是按順序存放的,數據和數據之間都由填充空間。

即便是時序數據庫,性能也遠遠低于csv和hdf5文件的性能,使用也更復雜。

對量化交易回測來說,對行情數據的存儲根本不需要 刪、改、查功能。

拿期貨行情數據為例,通常我需要將實時行情存儲,如果我開啟一個策略,需要計算M10 周期最近100個周期的KDJ指標,那么我只要需要最近的100X10X60X2個TICK數據即可,我只需要按時間順序讀取最近的12萬個TICK。
如果是從數據庫讀取的話,需要通過select語句或存儲過程等方式 獲得記錄集,并逐條取出,這個過程是非常耗時的
這個過程是非常耗時的,并且每條記錄之間,按默認設置,數據庫為了便于插入數據,往往在記錄之間留有空白的存儲空間,往往按默認設置,80%的空間是無用 的,也就是說,本來你只需要1M的空間你,實際占了5M的硬盤空間。事實上,你可能并沒有插入數據的請求。因為行情數據存儲都是順序的,按時間順序寫入之 后,通常不需要再插入新的行情數據。

對“查”來說,也并不是逐條取得,通常是取一個時間段的數據,并不是數據庫方式的 “查”數據的方式。
而且由于數據庫的IO較慢。有人說,可以用內存數據庫啊,事實上內存數據庫會占用大量的內存空間,而且他的快也只是和關系型數據庫比,遠遠慢于CSV和hdf5格式。



用文件存儲是一個更好的選擇,事實上很多知名的股票軟件公司都采用文件存儲行情數據的。
比如文件存儲怎么做呢?
例如按一個規則制定:
比如rb2110的2021年6月5日的TICK行情數據,就存儲在
..\data\20211005\TICK\rb2110.csv 目錄的文件下
該文件將順序存儲當天的TICK數據。
當我需要讀取最近3天數據的時候,就按先后分別讀取
..\data\20211005\TICK\rb2110.csv
..\data\20211006\TICK\rb2110.csv
..\data\20211007\TICK\rb2110.csv
這3個文件即可, 每個文件逐行讀取。
如果需要進一步節省硬盤存儲空間,我可以將data文件夾設置為 壓縮屬性。
在沒有設置壓縮屬性的情況下,采用文件方式存儲數據大約占用硬盤空間是采用SQL Server默認設置的20%硬盤空間。
在設置了data文件夾的壓縮屬性的情況下,采用文件方式存儲數據大約占用硬盤空間是采用SQL Server默認設置的4%硬盤空間。








VNPY官網

http://www.gencbio.com





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

4f.png (107.12 KB, 下載次數: 0)

誰來看過此貼
此貼被TA們瀏覽了91次
分享到:  QQ好友和群QQ好友和群
收藏收藏
回復 編輯推送

刪除主題|升降|置頂|直播|高亮|精華|圖章|圖標|關閉|移動|分類|復制|合并|分割|修復|警告|屏蔽|標簽|生成文章
:):(:D:'(
:@:o:P:$
;P:L:Q:lol
:loveliness::funk::curse::dizzy:
高級模式
B Color Image Link Quote Code Smilies @朋友 |
upload
驗證碼 換一個

本版積分規則

QQ|站點統計|舉報|Archiver|手機版|小黑屋|VNPY官方Python開源量化社區 ( 滬ICP備17025576號-16 )站長統計

GMT+8, 2022-1-4 00:01 , Processed in 0.152191 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright ? 2001-2020, Tencent Cloud.

關閉

應用更新提醒

您有 2 款應用有可用更新
快速回復 返回頂部 返回列表
<sup id="ikkqm"></sup>
<rt id="ikkqm"></rt>
<acronym id="ikkqm"><center id="ikkqm"></center></acronym><acronym id="ikkqm"></acronym>