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

Kdb TorQ:如何更新使用.loader.loadallfiles填充的磁盘数据库?,kdb,q-lang,torq,Kdb,Q Lang,Torq,我使用TorQ以累积方式从大型CSV文件填充磁盘数据库,效果非常好。然而,我现在还需要附加来自流媒体源的数据,我不确定最好的方法是什么 我知道如何更新或附加数据到内存中的数据库。但是,我不知道有什么API可以将增量更新同步到以前使用.loader.loadallfiles填充的磁盘数据库中 我调用.loader.loadeAllFiles例如 rawdatadir:hsym `$("" sv (getenv[`KDBRAWDATA]; "fwdcurve")); .loader.loadallf

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

我知道如何更新或附加数据到内存中的数据库。但是,我不知道有什么API可以将增量更新同步到以前使用
.loader.loadallfiles
填充的磁盘数据库中

我调用
.loader.loadeAllFiles
例如

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功能,可以在这里找到


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

当您说“从流媒体源附加数据”时,这是通过tickerplant实现的吗?嗨,Jonathon,谢谢您的提问。不,我将使用
qJava
将来自内部流媒体源的数据附加到内存数据库中,然后在某个时候需要更新磁盘数据库。进入KDB系统的典型数据流将涉及它通过tickerplant,而不是直接附加到内存数据库中。在这个设置中,您可以使用完整的TorQ堆栈来维护RDB(内存中的日内db)和管理EOD写入HDB(扩展从CSV加载的db)。这听起来合适吗?有一个简单的例子吗?但是,如果我理解正确,那么RDB最终将进入HDB或?所以我们回到行动…嗨,西亚兰,谢谢你的回答!但是,如果您能在回答中添加如何(在某个时候)将RDB转储到HDB中,我将非常感激,HDB现在正在使用
.loader.loadallfiles
填充。这将回答我的问题。。。是否有一个专门的API来涵盖这个用例?嗨,Giovanni,我希望这个更新的答案对你有帮助。