Как q кэширует данные?

Я пытался измерить время доступа к данным для базы данных, которую я создал. Для данных за один день требовалось ~ 1 с. Для агрегирования я запустил следующий код. Я использую kdb studio, и каждый день совершается примерно 1 миллион сделок.

\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 все еще кэшировал некоторые из предыдущих результатов?


kdb
person Naveen Sharma    schedule 08.10.2013    source источник
comment
Когда вы говорите, что закрыли сервер, вы имеете в виду, что вы разорвали соединение, а затем снова подключились, или вы действительно убили свой HDB, а затем снова запустили его?   -  person user1895961    schedule 08.10.2013
comment
убил мой HDB и начал снова, но хороший момент :). может ли это быть проблема с файлом страницы ОС/кэшированием?   -  person Naveen Sharma    schedule 08.10.2013


Ответы (2)


KDB+ ничего не кэширует. Это все аппаратное кэширование, если вы видите такую ​​​​разницу в скорости. Вы можете убедиться в этом, если очистите кеш (в unix-системах для этого есть набор команд, но вам потребуется root-доступ). Суть в том, что KDB+ вообще не кэширует. (если конечно не сказать... а-ля .Q.fu)

Кроме того, не знаю, как здесь работал ваш запрос - 20#dtl выдаст список дат, а date=x выдаст ошибку длины. Я предполагаю, что вы имели в виду «дата в x». В этом случае вы можете получить искаженные результаты из-за многопоточности, если вы используете -s в командной строке.

person Manish Patel    schedule 09.10.2013
comment
я делаю каждый для dtl - person Naveen Sharma; 09.10.2013
comment
проверил в линуксе. его аппаратный кеш. вы можете проверить, перезапустив kdb и выполнив sync and echo 3 › /proc/sys/vm/drop_caches` - person Naveen Sharma; 09.10.2013

Вероятно, это связано с тем, что ваша операционная система кэширует данные, считываемые с диска. Kdb+ по умолчанию не имеет встроенного кэширования.

person MdSalih    schedule 08.10.2013
comment
Это тоже мое предположение, но если нет способа найти это с некоторой уверенностью, это всего лишь предположение. может быть и что-то другое - person Naveen Sharma; 09.10.2013
comment
Если это Linux-система, и у вас есть привилегированный доступ (root/sudo), вы можете использовать следующую команду для очистки и очистки кешей: sync ; sudo echo 3 | sudo tee /proc/sys/vm/drop_caches - person MdSalih; 11.10.2013