q如何缓存数据?

时间:2013-10-08 07:16:52

标签: kdb

我试图测量我创建的数据库的数据访问时间。一天的数据需要大约1秒。为了聚合,我运行了以下代码。我正在使用kdb studio,每天总共有大约1MM的交易

\t ans: raze {select from trade where date=x, sym=`ABC} each 20#dtl

dtl是整个日期列表。我关闭了服务器并再次运行它,令人惊讶的是,这花了不到1秒钟。因为这与我上面观察到的相反,我跑了这个

\t ans: raze {select from trade where date=x, sym=`ABC} each 20#20_dtl

现在花了大约21秒。我的问题是,如果我关闭kdb服务器,q是否仍然可以缓存一些以前的结果?

2 个答案:

答案 0 :(得分:2)

这可能是由于您的操作系统缓存了从磁盘读取的数据。默认情况下,Kdb +不提供内置缓存。

答案 1 :(得分:1)

KDB +不会缓存任何内容。如果您看到这样的速度差异,那就是所有硬件缓存。如果刷新缓存,则可以确认这一点(在unix系统中,有一组命令可以执行此操作,但您需要root访问权限)。底线是KDB +根本不做任何缓存。 (除非你告诉它当然...... a。.Q.fu)

顺便说一句,不确定你的查询在这里如何工作 - 20#dtl将给出一个日期列表,而date = x则会给出一个长度错误。我假设你的意思是“日期在x”。在这种情况下,如果在命令行中使用-s,则可能会因多线程而导致结果偏差。