2014-12-05 40 views
2

Я борюсь с группированием последовательностей событий в одну атомную транзакцию.Создание последовательности событий атома в кислотном состоянии

Рассмотрите Map, хранящийся в кислотном состоянии, и представьте, что вы хотите реализовать Data.Map.alter. Функция, которая принимает значение-значение и возвращает его, не может быть сохранена в журнале изменений, поэтому невозможно определить кислотное событие Alter. Однако, если я напишу функцию, которая вызывает query st Lookup ..., чтобы найти старое значение, а затем update st Insert ..., чтобы написать новый (или удалить старый), есть условие гонки, и я могу уничтожить информацию из обновлений, которые произошли между ними.

В https://github.com/acid-state/acid-state/pull/48, я использовал дополнительный MVar для ручного блокирования, но должно быть лучшее решение.

Любые идеи?

ответ

3

Автор кислотного состояния здесь.

Решение состоит в том, чтобы не использовать функции более высокого порядка, такие как «alter». Преимущества кислотного состояния (гарантии ACID, запуск кода удаленно и т. Д.) Происходит за счет использования только сериализуемых данных. Это ограничение вряд ли когда-либо будет отменено.

Обычно это не большая проблема; Просто специализируйте свой код. Если это не режет, возможно, вы хотите сохранить свое состояние в MVar.

Cheers, David.

 Смежные вопросы

  • Нет связанных вопросов^_^