Вот два основных введения в MACID:
https://happstack.com/docs/crashcourse/HappstackState.html#happstack_state
https://www.kuliniewicz.org/blog/archives/2009/04/05/happstackstate-the-basics/
Увы, ни один из них не охватывает IxSet, тип данных, который часто используется с MACID для предоставления наборов с несколькими индексами (аналогично таблице SQL).
MACID — это постоянное хранилище в стиле «баранного облака», то есть весь ваш набор данных хранится в оперативной памяти. В настоящее время он поддерживает репликацию. Версия для разработчиков ориентирована на добавление поддержки шардинга (среди прочего).
Уникальность MACID заключается в том, что он хранит обычные типы данных Haskell, а запросы пишутся с использованием обычных функций Haskell. Вы не ограничены только небольшим подмножеством типов данных Haskell, таких как Int и String. Вместо этого вы можете использовать практически любой пользовательский тип данных.
Хотя MACID хранит рабочий набор данных в ОЗУ и не построен на реляционной модели, он по-прежнему обеспечивает гарантии ACID. Свойство долговечности гарантирует, что после успешного завершения фиксации событие не будет потеряно в случае сбоя сервера (или перезапуска).
Надежность достигается за счет записи каждого события обновления в журнал с упреждающей записью. Если сервер выходит из строя, состояние можно восстановить, воспроизведя любые события с момента последней контрольной точки.
Событие в журнале упреждающей записи состоит из имени функции обновления и аргументов этой функции. Поскольку события обновления являются чистыми, их воспроизведение всегда приводит к одному и тому же конечному состоянию.
Фактически двоичный формат данных, хранящихся в контрольных точках или событиях журнала, задается путем создания экземпляра класса Serialize. В большинстве случаев это можно сделать автоматически, вызвав функцию 'deriveSerialize' шаблона-хаскеля. Существует также класс Migrate, который используется для переноса значений из старых форматов в новые форматы при изменении типов данных.
Здесь есть старая запись в блоге о механизмах сериализации и миграции:
https://nhlab.blogspot.com/2008/12/data-migration-with-happs-data.html
Этот пост относится к «HAppS», но в Happstack он почти такой же, за исключением имен модулей.
Надеюсь это поможет.
25.02.2011