我有一个相当默认的tickerplant设置正在运行 (数据模拟过程推送到tickerplant,rer订阅tickerplant,HDB刷新EoD,网关进程查询RDB和HDB等。)
我现在想用竞价匹配引擎替换数据模拟过程。 此过程需要实时访问表,如报价,订单,交易和其他用户/会计数据表。
我的问题现在如下:
.u.upd
填充它们。这是正确的方法吗?或者我应该将表保留在bidmatcher流程的本地表中吗? .u.upd
仅执行插入操作,但我无法找到upsert
或delete
兼容的任何示例实现。答案 0 :(得分:3)
使用tickerplant将数据传递到RDB而不是使用独立的bidmatcher进程有很大的优势。如果您的设置将来发生变化,这允许其他订户接收bidmatcher数据,并且如果RDB崩溃,则tickerplant将创建将保存和重放数据的日志。
对RDB使用同步查询将起作用,因为它只是日内数据,但如果您每天存储大量数据,那么您可能会注意到RDB在运行查询时会暂时锁定。另一种方法是使用异步查询,这样它就不会在句柄等待返回结果时阻塞句柄。
如果要将数据传递给tickerplant,那么必须在其中定义模式,然后将其读入您的RDB,因此模式在那里是相同的。如果您使用键控表作为记录,那么它将失败,因为在tickerplant期望键控列为时间列之后的第一列。在典型的kdb + tick设置中,.u.upd
函数使用16=type first first x;
检查键控列之后的列,如果记录恰好是键控表,则当它到达(enlist(count first x)#a),x
时会失败。功能相同。
要解决这个问题,你必须修改你的upd函数,包括检查“type first x = 99h”。通过这种方式,它可以分支并为您的数据正确处理upserting。