Pregunta

Así que he estado usando ETS, funciona muy bien. Sin embargo, lo uso como un caché de datos de ruta, que cargo cuando el módulo se carga y guardo cuando se realiza un cambio (se lee mucho más que escrito).

Estaba pensando que Dets haría las cosas mucho más limpias: no tengo que preocuparme por manejar la persistencia de la mesa. ¿Sería esto un buen uso de Dets? (El tamaño no es un problema, principalmente preocupado por el aumento importante en el rendimiento de lectura: todos los datos pueden caber fácilmente en la memoria).

¿Fue útil?

Solución

Dets es mucho más lento que ETS en la mayoría de los casos, pero supongo que si el tamaño de sus datos es pequeño, entonces la mayoría será almacenado en caché por el caché de disco y será más rápido recuperar la segunda vez que lo lea, por lo que lo mejor es lo mejor es lo mejor es Pruébelo con su tipo de uso

¿Pero ha considerado usar Mnesia en lugar de ETS directamente? Con la tabla de mnesia tipo disc_copies obtendrá la velocidad de los ET y aún la persistencia

Otros consejos

Directamente del Página de Man Dets:

"Dado que todas las operaciones realizadas por DETS son operaciones de disco, es importante darse cuenta de que una sola operación de búsqueda implica una serie de operaciones de búsqueda y lectura de disco. Por esta razón, las funciones de DETS son mucho más lentas que las funciones de ETS correspondientes, aunque, aunque Dets exporta una interfaz similar ".

Es decir, para un almacenamiento de lectura más, Dets no es una opción óptima.

(Debo admitir que encuentro esta decisión de diseño extraña: una mejor implementación debe almacenar en caché de las búsquedas recientes. Sin embargo, dado que los ETS y los dets son instalaciones básicas en Erlang, supongo que los implementadores dejaron esa optimización para los usuarios).

Para escribir raramente, lea muchos datos que está bien manteniendo en la memoria, consulte un 'mochiglobal'. Mochiweb tiene un módulo ordenado que abusa del montón compartido de Erlang para las constantes de módulos a través del sistema de gestión de códigos para proporcionar acceso súper rápido a los términos generando módulos con valores dados como constantes en la mosca.

Riak usa un mochiglobal para el estado del anillo, iirc.

La suya es la fuente:

https://github.com/mochi/mochiweb/blob/master/src/mochiglobal.erl

Aquí no hay absolutamente ninguna persistencia, por supuesto, pero si está buscando optimizar fuertemente las lecturas, no puede ser mucho mejor que esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top