for use by higher order functions, e.g. reduce. ! Prefer to use pure functions Those with no side-effects or I/O. Easier to reason about, test, and compose. Functional programming
while transacting Abstracted, can use any of: Internal: In memory, on disk with transactor External: SQL, Riak, DynamoDB, and more Transactor Only 1 process
of: Internal: In memory, on disk with transactor External: SQL, Riak, DynamoDB, and more Reads from storage Inside your JVM app’s process Transparently cache from storage in local memory to satisfy reads Datomic’s architecture Consistent writes to storage Indexing Reads only while transacting Transactor Only 1 process
“Robert” 456] [123 :likes “coffee” 456] [456 :tx-timestamp “2014-02-06”] Each datom refers to the transaction that created it. Transactions are also entities!
! Required: Name, data type, cardinality (one or many). Optional: indexed, unique, and more. ! Datomic does not proscribe how you combine attributes on entities!