Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Immutable data...base?

Immutable data...base?

These are the slides for a talk I gave on the 6th of February at RubyFuza 2014.

Robert Stuttaford

February 06, 2014
Tweet

More Decks by Robert Stuttaford

Other Decks in Programming

Transcript

  1. Functions are the unit of composition Created, stored, passed around

    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
  2. Immutable, persistent data structures Once defined, can’t change ‘under’ you.

    Changes create copies. Copies share structure internally. Far, FAR easier to reason about!
  3. Prefer to pass unadorned data through mostly pure functions, !

    rather than creating typed instances and mutating in place via methods. ! Then, both the data and the logic are easier to compose and test! TL;DR
  4. Datomic is a database of  flexible, time-based facts, supporting

    queries and joins, with elastic scalability, and ACID transactions.
  5. Storage Datomic’s architecture Consistent writes to storage Indexing Reads only

    while transacting Abstracted, can use any of:
 Internal: In memory, on disk with transactor
 External: SQL, Riak, DynamoDB, and more Transactor
 Only 1 process
  6. Storage Peer Up to 30 procs Abstracted, can use any

    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
  7. Storage Query 1-64 peers Datomic’s architecture Memcached 2nd tier cache

    Peers look here before storage (paid licenses only) Paid licenses support high-availability transactor failover. Transactor
 Only 1 process
  8. Datomic’s data model [entity attr value] ! ! Entities have

    attributes with values. Each EAV combination is a ‘datom’. Entities typically have many datoms.
  9. Datomic’s data model [entity attr value tx] ! [123 :name

    “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!
  10. Datomic’s data model [entity attr value tx] ! [123 :likes

    “coffee” 456] [456 :timestamp “2014-02-06”] [123 :likes “beer” 789] [789 :timestamp “2014-02-07”]
  11. Datomic’s data model Schema defines only how attribute’s values behave.

    ! Required: Name, data type, cardinality (one or many). Optional: indexed, unique, and more. ! Datomic does not proscribe how you combine attributes on entities!
  12. Cape Town Clojure User Group Meet 1 or 2 Thursday

    evenings a month Next meet: 6-9pm,14 February 2014 Venue: Codebridge in Claremont @clj_ug_ct ! Talk notes: http://is.gd/imm_db