TorQ:如何更新用.loader.loadallfiles填充的磁盘数据库?

时间:2018-01-18 10:49:00

标签: kdb q-lang torq

我使用TorQ的.loader.loadallfiles以累积的方式从大型CSV文件填充磁盘数据库,效果很好。但是,我现在还需要附加来自流媒体源的数据,我不确定最好的方法是什么。

我知道如何更新数据或将数据附加到内存数据库。但是,我不知道有哪些API可以将增量更新一致地添加到先前使用.loader.loadallfiles填充的磁盘数据库中?

我打电话给.loader.loadallfiles,例如

rawdatadir:hsym `$("" sv (getenv[`KDBRAWDATA]; "fwdcurve"));
.loader.loadallfiles[`headers`types`separator`tablename`dbdir`partitioncol`partitiontype!(`date`ccypair`ftype;"ZSS";enlist ",";`fwdcurve;target;`date;`month); rawdatadir];

1 个答案:

答案 0 :(得分:1)

Jonathon评论的最好的想法是维护一个RDB来存储来自流媒体源的数据。当Kdb将数据保存到磁盘时,它会一次性保存整个列,因此,如果给出1000列5列的记录,最好要求它保存5个列表1000个条目,而不是要求它保存5列,每列一个条目1000次。

为了说明这需要的时间,假设我有两个磁盘列表x和y。 一次上传10000个元素非常快

q)\t `:x upsert 10000#1
0

一次只做一个

q)\t:10000 `:y upsert 1
126

使用完整的TorQ框架可能值得研究。它专门针对这种情况而设计。它具有RDB和HDB功能,可以在http://aquaqanalytics.github.io/TorQ/

找到

如果您希望附加像您这样的数据,那么目前还没有任何API可以做到这一点。您可以做的是修改要写入的RDB或WDB以附加到数据库。我认为使用.loader.writedatapartition然后调用.loader.finish会很有帮助。