Концепция и документы Happstack? - PullRequest
5 голосов
/ 24 февраля 2011

Я начинаю делать веб-сервер на Haskell.Я решил начать с Happstack и Happstack-state.И мне тяжело понять концепцию и атрибут Happstack-состояния.Это новый вид базы данных?или просто объект-граф, похожий на систему?

Можете ли вы объяснить его концепцию и атрибут (особенно о ACID, как хранятся данные на диске!) или указать мне, что документ хорошо описывает это?

Ответы [ 2 ]

5 голосов
/ 25 февраля 2011

Вот два основных введения в 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 он практически не отличается от имен модулей.

Надеюсь, это поможет.

3 голосов
/ 24 февраля 2011

MACID не является базой данных, в первую очередь это просто инфраструктура ACID, то есть он заботится о безопасности транзакций, именно ведя журнал транзакций на диске. Кроме того, вы можете использовать, например, IxSet, это наборы на стероидах и стандартный выбор, но вы можете с таким же успехом бросить свой собственный.

Боюсь, лучшая документация, о которой я знаю, это сам источник. HappStack недоверчиво недооценен.

...