DolphinDB : TSDB or OLAP ?

因为群里一件事的讨论,引发了这个问题,DolphinDB到底该使用TSDB 存储引擎,还是 OLAP ?

事情是这样的,我在使用ussert!做测试时,在群里发了如下结论:

使用了一下upsert! ,发现:
第一次全插入,用时4分多钟,大小712K 
第二次全更新。用时6分多钟,大小2.9M
看来更新不是原地改变,而是另起炉灶

牛人建议:

直接append。如果要去重,duplicatePolicy可以设置为LAST

于是我改动了代码:

原来是OLAP方案:

    db = database(dfs,RANGE,2020.01M + 12*0..22,engine='OLAP') 
    dt=db.createPartitionedTable(tb,tableName,`date).append!(tb)
在插入数据时,使用:
    upsert!(dt, tb, keyColNames=`code`date) //有则改之,无则插之

改成TSDB方案:

    db = database(dfs,RANGE,2020.01M + 12*0..22,engine='TSDB') 
    dt=db.createPartitionedTable(tb,tableName,`date,,`code`date,LAST).append!(tb)
在插入数据时,改为:
    dt.append!(tb);

然后做空间和时间的测试,结论如下 :

OLAP + upsert! 占用空间 800K,用时4分多钟,多次更新会成倍增大空间
TSDB + append! 占用空间 8M,用时3分多钟,多次更新不会增大空间

时间测试:

执行如下 查询50次:
select * from dt where chg>9
OLAP 用时: [738ms]
TSDB 用时: [5s 771ms]

结论:

无论从空间还是时间上看,TSDB无任何优势,至少在目前场景,数据变动不大情况下,优选OLAP+ upsert!

OLAP和TSDB的其它比较,网上一查就有,不细说了。

你可能感兴趣的:(dolphindb,OLAP,TSDB)