Escribo un rastreador bittorrent en erlang. Dada la naturaleza del servicio, no necesitaré una coherencia absoluta (es decir, un cliente puede estar perfectamente satisfecho con una lista de compañeros o un estado de torrente un poco desactualizados).Base de datos de mnesia eventualmente consistente con erlang. Las mejores prácticas alguien?
Mi estrategia hasta ahora ha sido crear tablas de mnesia en RAM con disc_copies habilitadas, para que mnesia descargue automáticamente la memoria en el disco cuando el tamaño del registro excede un cierto tamaño.
Si el servidor falla, se perderá parte de la información. No es un gran trato.
Un enfoque diferente sería instanciar dos tablas (una memoria RAM solamente y un disco solamente) y tener una copia de proceso de la ram al disco cada minuto más o menos. Esto es más ingenuo, pero permitiría volcar solo un subconjunto de lo que está en la memoria, reduciendo la sobrecarga general del disco y posiblemente evitando el uso de un registro (en realidad no estoy seguro acerca de esta última afirmación).
Estoy seguro de que hay muchas otras formas de hacerlo. ¿Lo que es tuyo?
-teo
Actualmente los datos de anunciar y torrente se almacenan en tablas de menesia solo para la memoria (todavía mantengo el disco copiado deshabilitado), lo cual es, por supuesto, extremadamente rápido. Persistir en el disco de todos modos haría que el servicio fuera más resistente a una falla del sistema (incluso teniendo en cuenta la resistencia implícita de bittorrent) y para mantener una mínima información relacionada con el torrente a lo largo del tiempo (número de descargas completadas). (http://mcaprari.github.com/peasy-torrent-tracker/) –