【发布时间】:2015-02-17 06:03:52
【问题描述】:
我听说从 HDB 和 RDB(内存中)数据库查询(选择等)时存在差异。 当我们应该使用 HDB 特定查询和 RDB 特定查询以及如何查询时,是否可以描述所有可能的场景:即 HDB 的查询示例和 RDB 的相同示例?
【问题讨论】:
我听说从 HDB 和 RDB(内存中)数据库查询(选择等)时存在差异。 当我们应该使用 HDB 特定查询和 RDB 特定查询以及如何查询时,是否可以描述所有可能的场景:即 HDB 的查询示例和 RDB 的相同示例?
【问题讨论】:
在我的头顶:
分区的 HDB 表将有一个“虚拟”日期列
RDB 表(通常)没有“日期”列
对于分区 HDB 表,虚拟“i”列的行为不同 (http://code.kx.com/q/ref/dotq/#qind-partitioned-index)
HDB 表(除非存储平面/序列化)不会立即完全拉入内存,数据是按需读取的
HDB表中的符号列将被枚举,内存中的RDB表将不被枚举
我无法给出真实的例子,但你只需要在查询时记住这些
【讨论】:
如果您使用的是普通 rdb/hdb 设置,那么情况如下:
所以你的 where 子句标准是:
对于 rdb 的最优查询总是
select from table where time ...
因为 rdb 表是按时间排序的。
hdb 的最佳查询总是
从 date=2014.12.24, sym=`AAPL, time ...的表中选择...
因为它减少了对磁盘的查找(只需要检查2014.12.24目录中的数据),是sym parted然后在sym内进行时间排序(虽然技术上显然没有s属性)。将日期作为 where 子句的第一部分非常重要! :)
【讨论】:
到目前为止,我遇到了以下在 hdb 中不起作用的示例查询。
当我遇到更多时,我会更新这个列表
【讨论】: