q如何缓存数据?

Nav*_*rma 5 kdb

我试图衡量我创建的数据库的数据访问时间。一天的数据大约要花1秒的时间。总的来说,我运行了以下代码。我正在使用kdb studio,每天总共有〜1MM笔交易

\t ans: raze {select from trade where date=x, sym=`ABC} each 20#dtl
Run Code Online (Sandbox Code Playgroud)

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

\t ans: raze {select from trade where date=x, sym=`ABC} each 20#20_dtl
Run Code Online (Sandbox Code Playgroud)

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

Man*_*tel 1

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

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