从 KDB HDB 和 KDB RDB 查询时的区别

use*_*448 1 kdb q-lang

我听说从 HDB 和 RDB(内存中)数据库查询(选择等)时会有所不同。当我们应该使用 HDB 特定查询和 RDB 特定查询以及如何查询时,是否可以描述所有可能的场景:即 HDB 查询的示例和 RDB 的相同示例?

Man*_*tel 5

如果您使用的是 vanilla rdb/hdb 设置,则场景如下:

  • tickeplant 收集 x 毫秒的数据并将其发送给听众
  • rdb 就是这样的一个监听器。它将保存从今天午夜到今晚午夜之前的数据
  • 在午夜,tickerplant 发送 .u.end 消息
  • 这调用 rdb 将内存表转储到 2014.12.19/ 目录内的磁盘上
  • 请注意,rdb 上的架构是 time、sym,然后是其他列。在 hdb 上,这会切换到日期(虚拟)、符号(p attr)、时间(在符号内排序)

所以你的 where 子句标准是:

  • 如果今天需要查询数据,就是rdb
  • 今天之前的任何事情,都是hdb
  • 任何混合的东西,在你的 hdb 上创建函数,从 rdb 中提取数据并加入

rdb 的最佳查询始终是

select from table where time ...
Run Code Online (Sandbox Code Playgroud)

因为 rdb 表是按时间排序的。

hdb 的最佳查询始终是

从表中选择日期=2014.12.24, sym=`AAPL, time ...

因为它减少了对磁盘的查找(只需要检查 2014.12.24 目录中的数据),被 sym 分开,然后在 sym 内进行时间排序(尽管技术上显然没有 s 属性)。将日期作为 where 子句的第一部分非常重要!:)