Datomic

Краткий обзор

 

Alexandr Pantyuhov / alwx@alwx.me

Что это?

Распределенная БД с поддержкой:
  • ACID-транзакций;
  • Join'ов;
  • Datalog как языка запросов.

Данные

  • Иммутабельны;
  • Хранятся как коллекция фактов;
  • Представлены в виде Datom.

Datom

  • entity/attribute/value/timestamp
  • Datom никогда не изменяется;
  • Datom'ы можно добавлять и удалять.
            
[entity    attribute          value         t   ]
...
[ 100      :person/name       "Alexandr"    102 ]
[ 101      :lecture/title     "Datomic"     102 ]
[ 101      :lecture/year      2013          102 ]
[ 101      :lecture/author    100           102 ]
...
            
          

Транзакции

Используется Datalog
            
[:find ?e
 :where
 [?e :person/name "Alexandr" _]]


[:find ?title
 :where
 [?e :lecture/year 2013]
 [?e :lecture/title ?title]]
            
          

http://learndatalogtoday.org/

            
[:find ?title
 :in $ [?director ?actor]
 :where
 [?d :person/name ?director]
 [?a :person/name ?actor]
 [?m :movie/director ?d]
 [?m :movie/cast ?a]
 [?m :movie/title ?title]]
            
          
            
[:find ?name
 :where
 [?p :person/name ?name]
 [(.startsWith ?name "M")]]
            
          

Data storage

  • В памяти;
  • SQL Database;
  • Dynamo DB;
  • Infinispan.

+

  • Простое описание схемы;
  • Отсутствие необходимости в миграциях;
  • Удобная консоль для новичков;
  • С недавнего времени Pro Starter бесплатно.

К слову о ценах

  • Pro Starter (2 peers, без memcached): бесплатно;
  • Pro 5 processes: 3000 долларов/год;
  • ...
  • Pro 30 processes: 16000 долларов/год;

Вопросы?

Слайды: http://github.com/alwx/slides-datomic