带有出价匹配引擎的KDB Tickerplant设置/架构

时间:2018-06-12 08:51:23

标签: kdb

我有一个相当默认的tickerplant设置正在运行 (数据模拟过程推送到tickerplant,rer订阅tickerplant,HDB刷新EoD,网关进程查询RDB和HDB等。)

我现在想用竞价匹配引擎替换数据模拟过程。 此过程需要实时访问表,如报价,订单,交易和其他用户/会计数据表。

我的问题现在如下:

  • 我想将bidmatcher所需的表格放入RDB,并通过tickerplant通过.u.upd填充它们。这是正确的方法吗?或者我应该将表保留在bidmatcher流程的本地表中吗?
  • 从RDB查询来自bidmatcher的数据(同步)是否安全?
  • 如果我将表格放在RDB中并通过tickerplant填充它们,我该如何管理upserts? .u.upd仅执行插入操作,但我无法找到upsertdelete兼容的任何示例实现。

1 个答案:

答案 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。