Позвольте мне начать с того, что - что такое Datomic ??

Datomic - это новый вид базы данных. Я слышал базу данных - что еще за база данных ??? Существует множество баз данных, тогда почему выбрали Datomic?

Хороший вопрос. Потому что Datomic другой. Datomic уравновешивает возможности традиционных СУБД и эластичную масштабируемость распределенных систем хранения. Это довольно удивительная технология с множеством интересных идей, которые могут изменить правила игры в области технологий баз данных.

В традиционных системах клиент-сервер база данных находится на большом сервере, где и выполняется вся обработка. Когда эта архитектура была разработана (еще в 70-х годах), память тогда была очень дорогой, поэтому они выбрали архитектуру, в которой все происходило на сервере. Но все изменилось, память стала намного дешевле. Итак, команда Datomic решила сломать эту структуру клиент-сервер и предложить набор сервисов, которые взаимодействуют друг с другом.

Таким образом, Datomic, по сути, предоставляет набор сервисов, которые помогают сохранять информацию надежным и экспоненциальным образом. Архитектура Datomic, которую часто приравнивают к базе данных, основывается на четырех моделях:

  • Модель данных
  • Модель транзакции
  • Модель запроса
  • Модель хранения

МОДЕЛЬ ДАННЫХ:

Модель данных Datomic определяет структуру хранения. Он состоит из 2 компонентов

Даты

данные - это простейшая вещь, которую можно закодировать как факты. По сути, это сущность и атрибут, его значение и время. Как насчет того, чтобы рассмотреть какой-нибудь реальный пример?

объект атрибут значение tx devendra: телефон 8552365147 50 devendra: адрес New Delhi 100

данные неизменны. Почему вы спрашиваете? Это потому, что Datomic работает очень похоже на человеческую память. Скажите, если бы мой номер телефона изменился, что бы вы сделали с базой данных SQL? Вы обновляете мой существующий номер моим новым номером. Да, это то, что мы делаем, но разве это то же самое, что и наш мозг? Он меняет старый номер телефона на новый? Нет. Он хранит и то, и другое с дополнительным понятием времени, что очень похоже на то, что делает Datomic.! Datomic сохраняет каждое «данные» со временем. Отсюда неизменность. После вставки вы не сможете его изменить. Таким образом, вы действительно можете путешествовать во времени и восстанавливать предыдущую информацию без необходимости создавать резервные копии, журналы или вручную сохранять исторические данные.

EDN (расширяемая нотация данных)

EDN или расширяемый формат нотации данных, в котором данные обмениваются между уровнями бизнес-логики и Datomic. Вместо жестко определенной структуры таблицы-столбца или структуры на основе объектов, которая требует модификации набора результатов в традиционной СУБД, EDN предоставляет гибкую структуру, подобную JSON, с дополнительными преимуществами - она ​​более компактна, ее легче печатать, включает целочисленный тип, нестроковые ключи карты, имеет хороший встроенный механизм расширения (который намного элегантнее, чем любая специальная вещь, которую может поддерживать JSON). Он также поддерживает основные типы данных: списки, векторы, множества, карты и т. Д. Если вы думаете, что я слишком сильно хваляю edn, то прочтите этот блог.

Datom и EDN вместе

Вот как выглядит простой «datom» (сущность из 5 кортежей) в edn:

объект атрибут значение транзакция добавлено

[42: телефон «8552365147» 13194139534315 верно]

Первые три кортежа говорят сами за себя. Транзакция ссылается на объект, который записывает время, когда транзакция была добавлена ​​в систему (и, возможно, другие факты о транзакции). Пятый кортеж «добавлен» - это логический флаг, который указывает, вставлено ли данные (true) или убрано (false).

МОДЕЛЬ СДЕЛКИ:

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

Transactor - это часть Datomic, которая выполняет все операции модификации данных, что означает, что он заботится обо всех вставках, обновлениях и отзывах. Это единая точка для всех транзакций, поэтому все записи происходят синхронно в избыточное хранилище, не оставляя возможности для каких-либо условий гонки (тех, которые возникают в распределенных кластерных системах хранения), что делает транзакции ACID по своей природе.

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

МОДЕЛЬ ЗАПРОСА:

Модель запроса предоставляет механизм запросов для операций чтения. Этот механизм фактически находится внутри приложения, которое называется Peer. Думайте о равноправном узле как о шлюзе к остальной части базы данных. В нем есть все компоненты, необходимые для связи со службами хранения и транзактором. Он также обеспечивает кеширование.

Datomic использует модель запросов, называемую Datalog, для помощи в обработке информации .. Datalog - это действительно язык программирования с декларативной логикой, который синтаксически является подмножеством Prolog. В нем есть правила, аналогичные просмотру в SQL. Самое приятное, что он расширяем с помощью функций и предикатов. Это означает, что функции могут быть локальными для приложения, что довольно просто, чем отправить метод на централизованный сервер базы данных, как это делается в модели клиент-сервер.

МОДЕЛЬ ХРАНЕНИЯ:

Модель хранения Datomic предоставляет - угадайте, что - услуги хранения! Как ни удивительно это звучит, Datomic на самом деле рассматривает хранилище как услугу. Это означает, что Datomic не предоставляет фактического «хранилища» как часть своего пакета. Он только предоставляет способы и средства доступа к базовому хранилищу, обеспечивая при этом вычислительную мощность через Datalog. . При этом у вас могут быть данные в памяти для быстрого тестирования или данные на локальном диске, что отлично подходит для разработки, или вы можете масштабировать до хранилища SQL (MySQL или postgre) / noSQL, например (Riak / Couchbase), или до служб хранения, таких как Amazon Dynamo DB.

Заключение

Это было просто быстрое и простое введение в различные части, которые делают Datomic, чтобы кого-то запустить. Есть много вопросов, которые нужно охватить, и я настоятельно рекомендую официальную документацию и спрашивать сообщество, хотите ли вы стать профессионалом.
Большинство из них - это хорошие вещи, такие как неизменность данных, данные, система запросов, масштабируемость . И, как и любой другой фреймворк, у него есть свой набор спорных тем, таких как узкое место у транзакции среди других. Я хотел бы ответить на любые вопросы по этому поводу - просто оставьте это как комментарий ниже!

Первоначально опубликовано на blogs.quovantis.com 13 октября 2015 г.