2011-04-12 12 views
9

Cómo crear un perfil si qlc: q realiza el escaneo de tabla completa, el escaneo de prefijos de tecla o la búsqueda de teclas?Erlang: cómo hacer un perfil de si qlc: q realiza escaneo de tabla completa, escaneo de prefijo de tecla o búsqueda de clave?

Por ejemplo, ets del tipo de conjunto con entradas como {{KeyPrefix, KeySuffix}, Valor} - se

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

hacer escaneo completo de tabla o prefijo clave escanear?

Respuesta

0

ETS no está implementado en Erlang, se implementa en el sistema de tiempo de ejecución (¿se supone que en C?). Como tal, no creo que sea posible hacerlo hoy. Incluso si descubrió una forma de hacerlo, su método podría romperse cuando se actualizó a una nueva versión de Erlang. Un método confiable requeriría que el sistema de tiempo de ejecución expone algún tipo de API de introspección a las entrañas de ETS, y creo que es poco probable que suceda mientras no se implemente en Erlang. Por supuesto, podría buscar en el código para tener una mejor idea de lo que podría suceder en un escenario determinado, pero sospecho que su tiempo sería mejor enfocado en el código de su aplicación.

+1

Esta pregunta no es específica de ETS, no creo. Podía prever que implementaría el mismo QLC en una tabla de mnesia o en una lista de tuplas de Erlang, y la misma pregunta seguiría siendo válida. –

0

En nuestra experiencia, a veces un qlc eval (a través de la lista de comprensión) es muy inteligente, y a veces es muy tonto. Es decir, creo que tu pregunta es válida.

No conozco ninguna manera de hacer exactamente lo que quiere, pero puede obtener esta información por otros medios. Sin duda, puede ver el código fuente del módulo qlc para ver si puede obtener alguna información de eso. Además, podría insertar algunas instrucciones de depuración dentro de las funciones qlc y volver a compilar su tiempo de ejecución de Erlang para obtener más comentarios.

Buena suerte
-tjw

1

Usted puede obtener una gran cantidad de información acerca de su expresión usando QLC qlc:info/1. Es posible que esto no ayude a determinar si una subconsulta determinada usa una exploración de tabla completa o lo que sea, pero eso le devuelve el plan de consulta y las tablas relacionadas con su consulta, que luego puede pasar al ets:info/1 para recuperar su tipo y keypos.

Cuestiones relacionadas