Erlang: как профилировать, выполняет ли qlc: q полное сканирование таблицы, сканирование префикса ключа или поиск ключа? - PullRequest
9 голосов
/ 12 апреля 2011

Как определить, выполняет ли qlc: q полное сканирование таблицы, сканирование префикса ключа или поиск ключа?

Например, ets типа, установленный с записями, такими как {{KeyPrefix, KeySuffix}, Value} - будет

qlc:q([
    {{KeyPrefix, KeySuffix}, Value} ||
    {{KeyPrefix, KeySuffix}, Value} <- ets:table(Table),
    KeyPrefix =:= Something
])

делать полное сканирование таблицы или сканирование префикса ключа?

Ответы [ 3 ]

1 голос
/ 10 мая 2011

Вы можете получить много информации о вашем выражении QLC, используя qlc: info / 1 .Это может не помочь вам определить, использует ли данный подзапрос полное сканирование таблицы или еще много чего, но это возвращает вам план запроса и таблицы, относящиеся к вашему запросу, которые вы затем можете передать ets: info / 1 чтобы получить их тип и ключи.

0 голосов
/ 10 мая 2011

По нашему опыту, иногда qlc eval (через понимание списка) очень умный, а иногда очень тупой.То есть, я думаю, что ваш вопрос верен.

Я не знаю способа сделать именно то, что вы хотите, но вы можете получить эту информацию другими способами.Вы, конечно, можете взглянуть на исходный код модуля qlc, чтобы узнать, сможете ли вы извлечь из этого какие-либо выводы.Кроме того, вы можете вставить некоторые операторы отладки в функции qlc и перекомпилировать среду выполнения Erlang, чтобы получить больше отзывов.

Удачи-tjw

0 голосов
/ 10 мая 2011

ETS не реализован в Erlang, он реализован в системе времени выполнения (предположительно в C?).Таким образом, я не верю, что это возможно сделать сегодня.Даже если вы нашли способ сделать это, ваш метод может сломаться, когда вы обновитесь до новой версии Erlang.Надежный метод потребовал бы, чтобы система времени выполнения выставляла какой-то API интроспекции внутренностям ETS, и я думаю, что это вряд ли произойдет, если это не реализовано в Erlang.Конечно, вы можете покопаться в коде, чтобы получить лучшее представление о том, что может произойти в данном сценарии, но я подозреваю, что ваше время было бы лучше потратить на то, чтобы сосредоточиться на коде приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...