Я пытаюсь создать очень простую вики-подобную систему в Clojure и обслуживать http с помощью Ring.Использование атома в качестве базы данных в памяти на веб-сайте кольца
Вместо обычной базы данных я думал об использовании только атома и сериализую его в файл, когда он изменяется. Что-то вроде https://github.com/alandipert/enduro просто с отложенной записью.
Имея данные in-mem в векторах и картах, безусловно, сделает сервис быстрее, а код проще/интуитивно понятным для записи?
Будет ли это работать с многопоточным сервером Jetty/Ring?
Содержание атома наверняка будет в памяти в настоящее время, но это может не сохраниться в будущем. Любые идеи о том, как я могу структурировать код, чтобы упростить переход на альтернативный сервер хранения данных в будущем?
Моя первая мысль была бы запись интерфейс с множеством/получить! операции, которые условно возвращают другой входной интерфейс в качестве подзаголовка. Впоследствии вы можете изменить реализацию, даже конкретную запись. Будет ли он «работать» многопоточным, зависит от того, какие ограничения синхронизации выполняются с несколькими запросами чтения и записи и какие из них могут выполняться параллельно. –
Я бы этого не сделал. Вы в конечном итоге переработаете много функций базы данных. Если вам нужно что-то простое, подумайте о запуске встроенного узла elasticsearch (в том же JVM, супер простом, 2 LOC), который также будет фантастическим для полнотекстового поиска. И elastisch (клиент clojure) очень просто. НТН – ClojureMostly