WedX - журнал о программировании и компьютерных науках

Концепция и документы Happstack-state?

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

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


Ответы:


1

Вот два основных введения в 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
  • Неужели любые данные можно хранить без каких-либо особых требований? Знак сериализации... производный от определенного класса... (о, я новичок в Haskell из OO) такие вещи? 25.02.2011
  • Есть несколько ограничений на типы, которые вы можете сериализовать. Например, вы не можете сериализовать тип данных, содержащий функцию. По сути, если вы можете создавать экземпляры Read и Show для типа, где 'read . show == id', то вы можете использовать этот тип непосредственно в своей базе данных MACID. 25.02.2011

  • 2

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

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

    24.02.2011
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]