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

TorQ: How to update disk database populated with .loader.loadallfiles?

我使用 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];

正如 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 会有所帮助。