2011-02-24 6 views
5

Estoy empezando a hacer el servidor web Haskell. He decidido comenzar con Happstack y Happstack-state. Y me cuesta entender el concepto y el atributo de Happstack-state. ¿Es un nuevo tipo de base de datos? ¿o solo un sistema similar a un objeto-gráfico?Happstack-state concept and docs?

Puede explicar su concepto y atributo (especialmente sobre el ácido, la forma en que los datos persistentes en el disco!) O señalar un documento describe bien?

Respuesta

5

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.

+0

¿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

+0

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

3

MACID no es una base de datos, sus más destacados de sólo un marco ÁCIDO, es decir, se preocupa por la seguridad transaccional, precisamente, al mantener un registro de transacciones en el disco. Además de eso, puedes usar, p. IxSet, que son conjuntos con esteroides y una opción estándar, pero también podría hacer su propio.

Me temo que la mejor documentación que conozco es la fuente, en sí misma. HappStack es extremadamente documentado.