【问题标题】:Does the KDB+ gateway have to hold all the data?KDB+ 网关是否必须保存所有数据?
【发布时间】:2020-07-14 13:09:55
【问题描述】:

我正在尝试实现一个网关设计来访问/抽象到我的数据库的 api,这只是同一台服务器上的单个 HDB 和 RDB。通读文档https://code.kx.com/q/wp/gateway-design/,最基本的网关至少充当中间人。如果没有聚合,这会使所需的数据传输加倍,而聚合似乎是通用的(例如实现“选择”),无论如何它都需要将所有数据拉到网关(例如,执行来自两者的所需数据的平均值)。我在网关的设计中是否缺少一些东西,以免通过它复制数据,一个简单而优雅的小型设置解决方案将是理想的。我想这通常是地图缩减问题,但在 KDB+ HDB/RDB 设置中。

【问题讨论】:

  • 您的网关提供什么用途?有点感觉您可以直接从您的客户端进程连接到 RDB/HDB(如果需要,可以包含一些用户友好的功能)?
  • 为数据/包装权限等提供单个api,最终可能会移动到多个服务器/进程。从编程的角度来看,我想要一个单一的入口点——尽管现在考虑按照你说的那样做,但这意味着为每种用户语言实现聚合。我很惊讶没有用于非复制数据转发和映射减少的本机功能/简单设计模式。对于 HDB 的第二点,我按天分区,RDB 是当前日期,所以奇怪的是没有功能可以说 RDB 只是 HDB 的另一个分片?
  • 您通过网关发送多少数据?你遇到问题了吗?我想你会希望聚合远离客户端(假设强大的服务器和例如桌面客户端),而不是发送大量数据以在客户端处理。
  • 数据非常大,一些客户端需要通过“原样”以块的形式发送以进行顺序播放,因此为什么双重复制并不理想。例如,其他客户需要聚合数据进行可视化。其次,网关上的聚合很好,这更多的是RDB / HDB集成以及如何编写通用无缝聚合的问题

标签: mapreduce time-series kdb


【解决方案1】:

网关一般不保存数据。相反,它使用进程间通信 (IPC) 向 RDB 和 HDB 发送请求。查询在RDB和HDB端计算,然后将结果发送到网关,然后发送到客户端,但网关通常不存储数据。

【讨论】:

  • 感谢您的回复,但我觉得这是对标题的回答,而不是问题。 “保留”是指在某个时候存在副本,我了解 RDB 和 HDB 的角色。
  • 为了澄清我的问题与网关上的持久数据无关,无论是在内存中还是在磁盘上,我问是否有办法阻止 IPC 发送两次数据,首先是网关,然后到客户端。对于一般聚合实现(选择),必须将所有数据发送到网关才能正确聚合 - 例如,平均值的平均值不是整体的平均值,您需要比这更多的数据,它需要实现每个聚合都知道确切需要哪些数据 - 即地图减少问题
  • 对不起,我误解了你的问题。我不知道有什么方法可以绕过网关并避免 IPC 两次发送数据。我知道的最佳解决方案是在 RDB 和 HDB 上执行子聚合,然后在网关级别组合它们,而不是将所有数据发送到网关。因此,例如,要计算平均值,您将获得 HDB 和 RDB 的总和和计数,然后在网关处将它们组合起来。
【解决方案2】:

你可能想看看https://www.aquaq.co.uk/kdb-gateways/ aquaq torq 已经实现了良好的 gw 设置。如果你正在设置一个新的 kdb 项目,torq 将是你的 boost starter。

Asyn gw 不保存任何数据 Sync gw 确实保存数据,并且可以在 sync gw 本身上完成处理,然后返回给用户/客户端

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2018-12-29
    • 2012-06-17
    • 2014-09-11
    • 2020-04-22
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多