2014-02-17 1 views
2

Я пытаюсь создать очень простую вики-подобную систему в Clojure и обслуживать http с помощью Ring.Использование атома в качестве базы данных в памяти на веб-сайте кольца

Вместо обычной базы данных я думал об использовании только атома и сериализую его в файл, когда он изменяется. Что-то вроде https://github.com/alandipert/enduro просто с отложенной записью.

Имея данные in-mem в векторах и картах, безусловно, сделает сервис быстрее, а код проще/интуитивно понятным для записи?

Будет ли это работать с многопоточным сервером Jetty/Ring?

Содержание атома наверняка будет в памяти в настоящее время, но это может не сохраниться в будущем. Любые идеи о том, как я могу структурировать код, чтобы упростить переход на альтернативный сервер хранения данных в будущем?

+0

Моя первая мысль была бы запись интерфейс с множеством/получить! операции, которые условно возвращают другой входной интерфейс в качестве подзаголовка. Впоследствии вы можете изменить реализацию, даже конкретную запись. Будет ли он «работать» многопоточным, зависит от того, какие ограничения синхронизации выполняются с несколькими запросами чтения и записи и какие из них могут выполняться параллельно. –

+1

Я бы этого не сделал. Вы в конечном итоге переработаете много функций базы данных. Если вам нужно что-то простое, подумайте о запуске встроенного узла elasticsearch (в том же JVM, супер простом, 2 LOC), который также будет фантастическим для полнотекстового поиска. И elastisch (клиент clojure) очень просто. НТН – ClojureMostly

ответ

1

Datomic предоставит вам несколько вариантов.

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

Или вы можете использовать Datomic только для Datalog, который может использоваться для запросов к структурам данных. В этом случае вы можете использовать атом, а затем сериализовать, как и планировалось. Переход к постоянному хранилищу данных будет больше работы, чем в первом случае, но все же не так много. В любом случае большая часть вашего кода не потребуется изменять.

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

1

I вторая рекомендация для Datomic.

Я использую его в реальном проекте в течение нескольких недель, и чем больше я его использую, тем больше я понимаю, что это будет прочная основа для обработки ваших данных в любом нетривиальном проекте , Даже если вы никогда не планируете использовать «настоящую» базу данных в будущем, просто имея основанную на фактах модель данных, мощный запрос и даже полнотекстовый поиск, встроенный, - огромная победа над использованием атома для хранения огромной карты ,

Я проверил, и бесплатная версия дает вам локальное хранилище, а также базу данных в памяти, так что это решит ваши потребности в хранении (он использует базу данных H2 за кулисами). И если вам когда-нибудь понадобится масштабироваться до чего-то большего, вы уже настроены.