5

我试图测量我创建的数据库的数据访问时间。一天的数据大约需要 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 是否仍然可以缓存以前的一些结果?

4

2 回答 2

2

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

于 2013-10-08T21:09:40.940 回答
1

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

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

于 2013-10-09T07:47:30.947 回答