Aquí hay dos introducciones básicas para MACID:
http://happstack.com/docs/crashcourse/HappstackState.html#happstack_state
http://www.kuliniewicz.org/blog/archives/2009/04/05/happstackstate-the-basics/
Alas, ni cubre IxSet, que es un tipo de datos que se utiliza a menudo con MACID para proporcionar juegos con varios índices (similares a una tabla SQL).
MACID es una tienda persistente estilo "nube RAM", lo que significa que todo su conjunto de datos se almacena en la memoria RAM. Actualmente es compatible con la replicación. La versión de desarrollo se centra en agregar compatibilidad con sharding (entre otras cosas).
Lo que hace única MACID es que almacena dataypes normales Haskell y consultas se escriben utilizando las funciones normales de Haskell. No está limitado a solo un pequeño subconjunto de tipos de datos Haskell como Int y String. En cambio, puede usar casi cualquier tipo de datos definido por el usuario.
Aunque las tiendas MacID el conjunto de datos de trabajo en RAM y no se basa en el modelo relacional, lo hace todavía proporcionan garantías ACID. La propiedad de durabilidad asegura que una vez que una confirmación retorna exitosamente, el evento no se perderá si es una falla del servidor (o reinicio).
La durabilidad se logra al registrar cada evento de actualización en un registro de escritura anticipada. Si el servidor se cae, el estado se puede restaurar reproduciendo cualquier evento desde el último punto de control.
Un evento en el registro de escritura anticipada consiste en el nombre de la función de actualización y los argumentos a esa función. Como los eventos de actualización son puros, reproducirlos siempre da como resultado el mismo estado final.
El formato binario en realidad para los datos almacenados en los puestos de control o registro de eventos se especifica mediante la creación de una instancia de la clase Serialize. En la mayoría de los casos, esto se puede hacer automáticamente llamando a la función template-haskell 'deriveSerialize'. También hay una clase Migrate que se usa para migrar valores de formatos antiguos a nuevos formatos cuando cambia sus tipos de datos.
Hay una vieja entrada de blog en los mecanismos de serialización y migración aquí:
http://nhlab.blogspot.com/2008/12/data-migration-with-happs-data.html
Ese puesto se refiere a 'Happs', pero es más o menos la misma en Happstack aparte de los nombres de los módulos.
Espero que esto ayude.
¿Se puede almacenar cualquier tipo de información sin requisitos especiales? Marca de serialización ... derivada de una clase específica ... (oh soy Haskell novato de OO) ¿tales cosas? – Eonil
Existen algunas limitaciones en los tipos que puede serializar. Por ejemplo, no puede serializar un tipo de datos que contiene una función. Básicamente, si puede crear instancias de Lectura y Mostrar para un tipo donde 'leer'. show == id ', luego puede usar ese tipo directamente en su base de datos MACID. – stepcut