Datomic база данных с философией
Недавно слушал подкаст, где обсуждали базу данных Datomic, якобы она рок-звезда среди всех БД со своей интересной философией. Мне стало настолько интересно, что последние дни провёл в теоретическом знакомстве, и остался в лёгком когнитивном шоке (в хорошем смысле).
Во-первых, она не удаляет данные. Никогда. Вообще! Каждая транзакция - это не просто "обновление", а добавление нового факта во временной поток. Получается встроенный time-travel: можно спросить у базы, как она выглядела на прошлой неделе в 17:42, и она честно ответит. Для задач с историей, аудитом и регуляторными требованиями - золото.
Во-вторых, архитектура: единый транзактор для всех записей и множество читателей (peer'ов), которые тянут данные напрямую из хранилища. Чтения масштабируются горизонтально, а кеши встроены по дефолту. Да, звучит странно, но красиво.
Datalog (язык запросов) тоже порадовал - что-то между SQL и Прологом, но ближе к логическому мышлению. Особенно хорошо ложится в проекты на Clojure. И вот тут начинаются минусы...
👉 В Go мире Datomic - как гость с другого континента. Нет нативной библиотеки, всё взаимодействие только через REST или EDN. То есть, хочешь использовать - ставь JVM, пиши прослойку, парси EDN. В общем, костыли.
👉 Datomic плохо подходит под высоконагруженные сценарии с частыми записями. Один транзактор = одна очередь. Не жужжит как Kafka, увы.
👉 И главный вопрос: а тебе точно нужна вечная история всех данных? Если да - это шанс. Если нет - может, стоит просто логировать изменения в Postgres.
💡 В целом, Datomic - как японская керамика: красиво, нестандартно, требует уважения к философии. Но чашку кофе в неё не нальёшь, если ты пишешь микросервисы на Go и хочешь всё просто.
Оставлю пока как архитектурную идею и источник вдохновения. А вдруг когда-нибудь соберусь на проект с Clojure и решу пожить немного вне времени 😉
P.S. Если интересно расскажу подробнее в следующих постах: про плюсы/минусы или как это всё сравнивается с Mongo и PostgreSQL?
Post #11
187

- 🔥 3