8 things I like about Datomic

4,226 views

Published on

Introduction to Datomic that highlights its core feature set.
Intorudction to FluxGraph, a temporal Graph Database implemented on top of Datomic.

Published in: Technology, News & Politics
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,226
On SlideShare
0
From Embeds
0
Number of Embeds
1,077
Actions
Shares
0
Downloads
45
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

8 things I like about Datomic

  1. 1. Tuesday BIGDATA.BE28.08
  2. 2. 8 Things I like about Datomic + something about temporal graph databases www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  3. 3. About me Who am I ... ➡ Working as an it lead / software architect @ Janssen Diagnostics • Dealing with big scientific data sets • Hands-on expertise in Big Data and NoSQL technologies ➡ Founder of datablend • Provide Big Data and NoSQL consultancy Davy Suvee • Share practical knowledge and Big Data use cases via blog @DSUVEE www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  4. 4. 1 - Data Immutability entity attribute valueDatom [ 10 ‘:name’ ‘datablend’ ] www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  5. 5. 1 - Data Immutability entity attribute valueDatom [ 10 ‘:name’ ‘datablend’ ] ‘dataother’ www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  6. 6. 1 - Data Immutability entity attribute valueDatom [ 10 ‘:name’ ‘datablend‘ tx1 ] [ 10 ‘:name’ ‘DATAOTHER‘ tx2 ] defines time www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  7. 7. 2 - Schema-Less kind of ...Util.map(":db/id", Peer.tempid(":db.part/db"),         ":db/ident", ":name",         ":db/valueType", ":db.type/string",         ":db/cardinality", ":db.cardinality/one",         ":db/doc", "The name of an entity",         ":db.install/_attribute", ":db.part/db")); attribute definition www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  8. 8. 3 - Everything is a Datom[ 10 ‘:name’ ‘datablend‘ ][ 10 ‘:tel’ ‘01234566789‘ ] [ 99 ‘:db/ident’ ‘:name’ ] [ 99 ‘:db/valueType’ ‘:db.type/string’ ][ 11 ‘:name’ ‘Davy Suvee‘ ] [ 99 ‘:db/cardinality’ ‘:db.cardinality/one’ ][ 11 ‘:knows’ ‘java‘ ] [ 99 ‘:db/doc’ ‘The name of an entity’ ][ 11 ‘:knows’ ‘NoSQL‘ ] [ 99 ‘:db.install/_attribute’ ‘:db.part/db’ ][ 11 ‘:founded’ 10 ] www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  9. 9. 3 - Everything Is A Datom transaction [ 10 ‘:name’ ‘datablend‘ 251] www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  10. 10. 3 - Everything Is A Datom transaction [ 10 ‘:name’ ‘datablend‘ 251] [ 251 ‘:db/txInstant’ ‘35454920495’ ] timestamp www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  11. 11. 3 - Everything Is A Datom transaction [ 10 ‘:name’ ‘datablend‘ 251] [ 251 ‘:db/txInstant’ ‘35454920495’ ] timestamp [ 251 ‘:source’ ‘:external’ ] meta-data [ 251 ‘:url’ ‘bigdata.be’ ] www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  12. 12. 4 - Datalog logic programming for your datoms[ 10 ‘:name’ ‘datablend‘ ][ 10 ‘:tel’ ‘01234566789‘ ] [:find ?entity ?name[ 11 ‘:name’ ‘Davy Suvee‘ ] :where [?entity :name ?name]][ 11 ‘:knows’ ‘java‘ ][ 11 ‘:knows’ ‘NoSQL‘ ] (10 ‘datablend‘)[ 11 ‘:founded’ 10 ] (11 ‘Davy Suvee‘) www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  13. 13. 4 - Datalog logic programming for your datoms[ 10 ‘:name’ ‘datablend‘ ][ 10 ‘:tel’ ‘01234566789‘ ] [:find ?name[ 11 ‘:name’ ‘Davy Suvee‘ ] :where [?person :name ?name] [?person :knows ‘java’]][ 11 ‘:knows’ ‘java‘ ][ 11 ‘:knows’ ‘NoSQL‘ ][ 11 ‘:founded’ 10 ] (‘Davy Suvee‘) www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  14. 14. 4 - Datalog logic programming for your datoms[ 10 ‘:name’ ‘datablend‘ ][ 10 ‘:tel’ ‘01234566789‘ ] [:find ?name :where [?com :name ?name][ 11 ‘:name’ ‘Davy Suvee‘ ] [?person :knows ‘java’][ 11 ‘:knows’ ‘java‘ ] [?person :founded ?com]][ 11 ‘:knows’ ‘NoSQL‘ ][ 11 ‘:founded’ 10 ] (‘datablend‘) www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  15. 15. 4 - Datalog ... and as everything is a datom ...[:find ?attribute :where [?attribute :db/valueType :db.type/string]] www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  16. 16. 4 - Datalog ... and as everything is a datom ...[:find ?attribute :where [?attribute :db/valueType :db.type/string]] [:find ?entity ?url :where [?entity :name “datablend” ?tx] [?tx :source :external] [?tx :url ?url]] www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  17. 17. 5 - Power your queries[:find ?tech :where [_ :knows ?tech] any valid Java expression [(.startsWith ?tech “J”)]] www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  18. 18. 5 - Power your queries[:find ?tech :where [_ :knows ?tech] any valid Java expression [(.startsWith ?tech “J”)]][[(ancestor ?person ?ancestor) [?person :person/parent ?ancestor]] [(ancestor ?person ?ancestor) [?person :person/parent ?parent]                               (ancestor ?parent ?ancestor)]]] recursive rules www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  19. 19. 6 - Travel through time [ 10 ‘:name’ ‘datablend‘ tx 1 ] [ 10 ‘:name’ ‘DATAOTHER‘ tx2 ]String query = “[:find ?name :where [10 :name ?name]]”;Peer.q(query, conn.db()); (‘dataother’) www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  20. 20. 6 - Travel through time [ 10 ‘:name’ ‘datablend‘ tx 1 ] [ 10 ‘:name’ ‘DATAOTHER‘ tx2 ]String query = “[:find ?name :where [10 :name ?name]]”;Peer.q(query, conn.db()); (‘dataother’)Peer.q(query, conn.db().asOf(tx1)); (‘datablend’) www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  21. 21. 6 - Travel through time [ 10 ‘:name’ ‘datablend‘ tx 1 ] [ 10 ‘:name’ ‘DATAOTHER‘ tx2 ]String query = “[:find ?name :where [10 :name ?name]]”;Peer.q(query, conn.db()); (‘dataother’)Peer.q(query, conn.db().asOf(tx1)); (‘datablend’)Peer.q(query, conn.db().with(futuretx)); (‘datamix’) [ 10 ‘:name’ ‘datamix‘ ] www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  22. 22. 7 - Scalability reversed www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  23. 23. 8 - Pluggable data stores➡ In memory (dev mode)➡ SQL Database➡ DYNAMO DB➡ INFINISPAN➡ Switch transparently and migration tools available www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  24. 24. FluxGraph:Tinkerpop on top of Datomic (http://github.com/datablend/blueprints) www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  25. 25. FluxGraph➡ Blueprints implementation on top of Datomic www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  26. 26. FluxGraph➡ Blueprints implementation on top of Datomic➡ Graph Time Travel public void setTime(Date checkpoint); www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  27. 27. FluxGraph➡ Blueprints implementation on top of Datomic➡ Graph Time Travel public void setTime(Date checkpoint);➡ Time-scoped iteration of vertices and edges public Vertex getPreviousVersion(); public Iterable<Edge> getNextVersions(); public Iterable<Edge> getNextVersions(Filter filter); www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  28. 28. Time-aware social graph www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  29. 29. GraphConnect “The use of Temporal Graph Databases to ease the analysis of longitudinal patient data” www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg
  30. 30. Questions?
  31. 31. Contact usFollow us E-MAILtwitter.com/data_blend info@datablend.bewww.datablend.be www.datablend.be info@datablend.be 0499/05.00.89 Diepestraat 23 - heist-op-den-berg

×