从KDB HDB和KDB RDB查询时的差异

时间:2014-12-18 12:37:58

标签: kdb q-lang

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

3 个答案:

答案 0 :(得分:3)

如果您正在使用vanilla rdb / hdb设置,那么这就是场景:

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

所以你的where子句标准是:

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

rdb的最佳查询始终是

select from table where time ...

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

hdb的最佳查询始终是

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

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

答案 1 :(得分:2)

脱离我的头顶:

分区的HDB表将有一个"虚拟"日期栏

RDB表(通常)没有“日期列”

虚拟" i"对于Partitioed HDB表(http://code.kx.com/q/ref/dotq/#qind-partitioned-index

,列的行为有所不同

HDB表(除非存储平面/序列化)不会立即完全插入内存,数据按需读取

将枚举HDB表中的符号列,内存中的RDB表将是未列举的

我没有给出真正的例子,但你只需要在查询时记住这些

答案 2 :(得分:0)

到目前为止,我遇到了以下在hdb中无效的示例查询。

  1. count tablename
  2. 从tablename
  3. 中选择[10]
  4. 删除/更新/插入语句只有临时效果,直到hdb重新启动
  5. 当我遇到更多

    时,我会更新此列表