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