Kdb 如何通过插座推动桌子

Kdb 如何通过插座推动桌子,kdb,Kdb,考虑到的设置,桌子是如何通过插座推动的 在tick中,可以使用进程(比如)向tickerplant订阅a,然后在新数据到达时,该进程将继续将订阅的“tickers”数据推送到a 我也想这么做,但我想知道怎么做。据我所知,qprocess之间的进程间通信就是将命令从一个进程传输到另一个进程的能力,这样命令将在另一个进程上执行 那么,如何在进程之间传输完整的表呢 我知道在tick中实现这一点的方法是and,但我不清楚表是如何在进程之间传输的 所以我有两个问题: kdb+tick是如何做到这一点的

考虑到的设置,桌子是如何通过插座推动的

在tick中,可以使用进程(比如)向
tickerplant
订阅
a
,然后在新数据到达时,该进程将继续将订阅的“tickers”数据推送到
a

我也想这么做,但我想知道怎么做。据我所知,
q
process之间的进程间通信就是将命令从一个进程传输到另一个进程的能力,这样命令将在另一个进程上执行

那么,如何在进程之间传输完整的表呢

我知道在tick中实现这一点的方法是and,但我不清楚表是如何在进程之间传输的

所以我有两个问题:

  • kdb+tick
    是如何做到这一点的
  • 通常,如何将表从一个进程推送到另一个进程

让我们了解一下这样做的简单过程:

我们有一个服务器'S'和一个客户端'C'。当“C”调用.u.sub函数时,该函数代码使用其主机和端口连接到“S”,并使用订阅参数调用“S”(比如“request”)上的特定函数

在获取此请求时,“S request”函数会在其subscription表中创建以下条目,该表是为订阅请求维护的

->客户端的主机和端口(传入请求)

->订阅参数(对于ex.客户端,发送sym`VOD.L进行订阅)

现在,当“S”从提要获取任何数据更新时,它将遍历其订阅表并检查其订阅参数列值(在本例中为sym)与传入数据匹配的条目。然后,它使用表中的主机和端口连接到它们中的每一个,并使用新数据调用它们的“upd”函数

唯一的问题是,客户端应该在其一侧定义“upd”函数

这是一个非常基本的过程。KDB+通过额外的优化和特性来使用它。例如,更优化的结构用于维护订阅表、日志维护、重放日志、取消订阅、恢复逻辑、发布计时器等


有关更多详细信息,您可以查看“u”命名空间中函数的定义。

谢谢,这是一个非常可靠的解释。我只想了解一件事:
“然后它使用表中的主机和端口与它们中的每一个建立连接,并使用新数据调用它们的“upd”函数。”
。它是如何将这些新数据发送到客户端的?它可以在收到请求时第一次进行处理,并将其存储起来以备将来通信。要生成句柄:h:hopen`:host:port。在kx维基上查看“hopen”。使用handle:h(函数;func_参数)发送数据。这将调用客户端函数。例:h(upd;table_name;table_data)我知道(实际上我已经在使用类似的句柄),但我想知道如何发送数据。这是逐行完成的吗?所以发送意味着我只需在客户端进程上调用
insert[table\u name;(DATA)]
?这是最好的方法吗?哦…您可以使用句柄一次发送完整数据,然后在客户端立即插入。大容量插入比多行单行插入快。客户端如您所述,它将是简单的插入。问题是服务器将如何发送它。若您在tcp缓冲区限制中有行(这是实时提要的情况),服务器可以像h一样立即发送(upd;
trade;从trade中选择sym=
VOD.L)。如果它们超出了限制,你可以像{h(upd;
trade;x)}一样打破它们,每1000次切割从sym=
VOD.L的交易中选择。1000仅用于ex,您可以根据应用程序对其进行调整。