Если вас интересуют преимущества, которые вы можете получить от неизменяемости в базе данных или, по крайней мере, в базе данных, которая предлагает иллюзию неизменности, отметьте Datomic.
Datomic - это база данных, изобретенная Rich Hickey в сочетании с Think Relevance. Существует множество видеороликов, в которых рассказывается об архитектуре, целях и модели данных. Поиск infoq, в частности, один называется Datomic, База данных как значение . В разделе «Конфликты» вы можете найти лейтмотив, который Рич Хики дал на конференции euroclojure в 2012 году. Confreaks.com/videos/2077-euroclojure2012-day-2-keynote-the-datomic-architecture-and-data-model
В vimeo.com/53162418 есть разговор, который больше ориентирован на развитие.
Вот еще один из Стюарт Хэллоуэй в .pscdn.net/008/00102/videoplatform/kv/121105techconf_close.html
- Datomic представляет собой базу данных фактов во времени, называемых датумами, в 5 кортежах [E, A, V, T, O]
- E Entity ID
- Имя атрибута в сущности (может иметь пространства имен)
- V Значение атрибута
- T Transaction ID, с этим у вас есть представление о времени.
- O Одна операция утверждения (текущая или текущая стоимость), отклонение (прошедшая стоимость);
- Использует собственный формат данных, который называется EDN (расширяемая нотация данных)
- Транзакции КИСЛОТНЫЕ
- Использует журнал данных в качестве языка запросов, который декларативен как SQL + рекурсивные запросы. Запросы представлены структурами данных и расширены вашим языком jvm, вам не нужно использовать clojure.
- База данных разделена на 3 отдельных сервиса (процессы, машины):
- Сделка
- Место хранения
- Query Engine.
- Вы можете отдельно масштабировать каждую услугу.
- Это не с открытым исходным кодом, но есть бесплатная (как в пиве) версия Datomic.
- Вы можете указать гибкую схему.
- набор атрибутов открыт
- добавлять новые атрибуты в любое время
- нет жесткости в определении или запросе
Теперь, поскольку информация хранится как факты во времени:
- все, что вы делаете, это добавляете факты в базу данных, вы никогда не удаляете их (кроме случаев, когда это требуется по закону)
- Вы можете кэшировать все навсегда. Query Engine, живет на сервере приложений как база данных в памяти (для языков jvm не-jvm языки имеют доступ через API REST.)
- Вы можете запросить как раз в прошлом.
База данных является значением и параметром для механизма запросов, QE управляет соединением и кэшированием. Поскольку вы можете видеть базу данных как значение и неизменную структуру данных в памяти, вы можете объединить ее с другой структурой данных, созданной из значений «в будущем», и передать ее в QE и запросить будущие значения, не изменяя фактическую базу данных. ,
Существует проект с открытым исходным кодом от Rich Hickey, который называется codeq , вы можете найти его в github Datomic / codeq, который расширяет модель git и хранит ссылки на объекты git в базе данных без данных, а также выполняет запросы к вашему коду. можно увидеть пример того, как использовать Datomic.
Вы можете думать о datomic как об ACID NoSQL, а с помощью датумов вы можете моделировать таблицы или документы, Kv-хранилища или графики.