DolphinDB與Pandas對於大文本文件處理的性能對比
6 人贊了文章
DolphinDDB是一款高性能的分散式時間序列資料庫產品。它集成了功能強大的編程語言和高容量高速度的流數據分析系統,為海量數據(特別是時間序列數據)的快速存儲、檢索、分析及計算提供一站式解決方案。
Pandas是Python的一個數據包,最初被作為金融數據分析工具而開發出來的,因此Pandas為時間序列分析提供了很好的支持。Pandas還提供了大文本文件的方法,在遇到SQL不能解決的問題時,其中一個可行方案是把文件下載下來用Pandas處理。
DolphinDB雖然是一個分散式系統,但也可以作為工作站使用。DolphinDB和Pandas都能夠處理大文本文件,哪個的表現更出色呢?在處理大文本文件時,我們最關心的兩個因素是性能和內存佔用情況。因此,我們將從這兩方面對DolphinDB和Pandas進行對比。
本次測試使用的硬體和操作系統如下:
Dell PowerEdge R830 伺服器
內存:1024GB
CPU:E5-4640 v4 48 核 2.1GHZ
操作系統:Fedora27
RAID 0:8X1.2TB 10000 RMP HDD
DolphinDB提供了修改內存使用限制的配置項,所以我們把內存限制設置為128G,24核,這更符合大部分實際用戶的伺服器配置。而在Pandas中,我們無法對內存進行限制。
- 數據生成
我們在DolphinDB中生成40G文本文件,包含了16列,一共有390,000,000行數據。生成數據的腳本如下:
n=390000000workDir = "/data"if(!exists(workDir)) mkdir(workDir)sample=table(rand(string(A..Z) + "XXXX",n) as sym, 2000.01.01+rand(365,n) as date, 10.0+rand(2.0,n) as price1, 100.0+rand(20.0,n) as price2, 1000.0+rand(200.0,n) as price3, 10000.0+rand(2000.0,n) as price4, 10000.0+rand(3000.0,n) as price5, 10000.0+rand(4000.0,n) as price6, rand(10,n) as qty1, rand(100,n) as qty2, rand(1000,n) as qty3, rand(10000,n) as qty4, rand(10000,n) as qty5, rand(10000,n) as qty6)sample.saveText(workDir + "/trades_40G.txt")
2. 性能和內存佔用比較
計算時間:
在DolphinDB中使用timer函數,在Pandas中使用%time。
內存佔用:
我們可以使用Linux命令htop來監視DolphinDB和Pandas的內存佔用情況。我們不僅記錄了任務執行前後的內存佔用,還記錄了內存佔用的峰值。
3. 測試結果和結論
我們主要測試了文本載入和其他基本操作,如添加計算列、分組、更新和使用窗口函數增加列。測試腳本見附錄。測試結果如下表所示。為了減少特殊值的影響,我們把每個測試腳本都執行了10次,表中的時間是10次的執行總用時。
從測試結果中,我們可以得出以下結論,DolphinDB在性能上比Pandas快1~2個數量級,並且內存佔用通常小於pandas的1/2,DolphinDB內存佔用的最大值僅為pandas的1/3到1/2。從結果可以看出,在pandas中對於一些特定任務如增加一列數據,內存佔用在執行前後不會發生變化,這是因為pandas會預先分配一定的內存供後續使用。
附錄1. 測試腳本
歡迎訪問官網下載DolphinDB試用版
推薦閱讀:
※「數據引導你的行為」:大數據背後的權力與不公
※分散式資料庫數據一致性原理說明與實現
※行業 | 我的數據科學成果為什麼無法商業化?
※大數據 | 生猛持久的鮮肉VS活好不粘人的大叔,你選誰?