Pandas是Python的一個包,最初被做爲金融數據分析工具而開發,爲時間序列分析提供了很好的支持。數據庫
DolphinDB Database 是一款高性能的分佈式時序數據庫。它集成了功能強大的編程語言和高容量高速度的流數據分析系統,爲海量數據(特別是時間序列數據)的快速存儲、檢索、分析及計算提供一站式解決方案。編程
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 database 中生成一個40G文本文件,包含了16列,一共有390,000,000行數據。生成數據的腳本以下:
n=390000000 workDir = "/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個數量級(10~100倍),而且內存佔用一般小於pandas的1/2,DolphinDB內存佔用的最大值僅爲pandas的1/3到1/2。從結果能夠看出,在pandas中對於一些特定任務如增長一列數據,內存佔用在執行先後不會發生變化,這是由於pandas會預先分配必定的內存供後續使用。
附錄1. 測試腳本
歡迎訪問官網下載DolphinDB試用版