Использовать clojureql или STM + асинхронные записи? - PullRequest
3 голосов
/ 30 декабря 2010

Я пишу приложение в ближайшем будущем, которое должно сохранить свои данные, но если некоторые данные будут потеряны, то это не будет катастрофическим. Мне интересно, должен ли я использовать ClojureQL каждый раз, когда я хочу получить доступ к данным, или я должен использовать STM + ClojureQL и просто сохранять данные асинхронно при обновлении / записи. Кто-нибудь знает какие-либо преимущества / недостатки каждого подхода. И кто-нибудь пробовал подход асинхронного постоянства?

1 Ответ

6 голосов
/ 30 декабря 2010

Это классический подход к улучшению задержки записи, часто называемый обратной записью. Пакетирование обновлений и выполнение их в отдельном асинхронном потоке имеет несколько преимуществ:

  • удаляет (предположительно медленные) записи в постоянное хранилище из пути обновления
  • более эффективно, если вы можете пакетные обновления
  • может разрешить объединение обновлений (если у вас есть несколько записей для одного и того же ключа в одном пакете, вы можете просто уничтожить все, кроме последнего, и никогда не записывать промежуточное значение вообще)

Обратная запись также имеет существенные недостатки:

  • записи могут быть потеряны, если данные хранятся только в памяти
  • иногда сложно заставить фоновый асинхронный поток правильно работать с остальной частью транзакционной системы
  • фоновые потоки могут быть сохранены, поскольку они обрабатывают "медленную" часть операции; запись с задержкой лучше всего работает, когда она используется для ускорения случайных пиков и может восстанавливаться во время впадин
  • последующие чтения между записью в память и записью в хранилище будут видеть старое значение, если только вы не проверите состояние в памяти - это может быть либо запутанным, либо потенциально дорогостоящим при чтении. Из-за этого обратная запись часто используется в сочетании с кэшированием сквозного чтения, когда все чтения происходят через кеш.

Ничто из этого, разумеется, не имеет ничего общего с ClojureQL или STM. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...