SlideShare a Scribd company logo
1 of 64
Download to read offline
The power of Datomic
Konrad Szydlo
@ryujinkony
Independent components
● Storage
● Reading
● Writes
● Query
Main features
● No update-in place
● Only assertions and retractions
● Retraction != removal
● Immutable data
● Database as a value
● Flexible schema
● ACID transactions
● Declarative and logic data programming
Datomic's Reality model
● Based on Clojure's reality model
● Value
● Identity
● State
● Time
Value
● Never changing property
● Stable, immutable
● 44
● “John”
● 44 != 61
● Same meaning regardless of context
Identity
● Named entity in a system
● May have different values
● At different points in time
● “John”
● “Johnny”
● “ElfenLied”
State
● Value of an identity
● At a point in time
Time
● By-product of ordering states within an entity
● Linear progression
● Morning => ElfenLied
● Afternoon => John
● Evening => ElfenLied
Datom
● Basic unit of operation in Datomic
● Also called a fact
● Made up of five parts
Datom example
Entity attribute value Tx operation
2439 name John at work add
2439 name John playing retract
2439 name ElfenLied playing add
Not only “now”
● Easy access to past and future states
● What was the value of x one week ago?
● What was the state of DB before app crashed?
● Not so easy in RDBMS
Everything is data
● Datomic operates on data
● Lists, maps, vectors, keywords, strings
● Even functions, schema is data
● Possible to run queries on all data
Transactor
● Single instance
● Handles all writes
● Second instance on stand-by
● Ensures ACID properties
● Notifies transaction submitter and all peers
(other applications) when transaction is
persisted
Storage
● Not directly in Datomic
● Leverages storage services:
– DynamoDB
– Riak
– Infinispan
– SQL storages
● Storing segments of datoms not individual ones
● Log storage – chronological
● Indices storage – various orders of datoms
Indices
● Entity / Attribute / Value / Transaction
● Sorted order
● EAVT – all datoms (SQL “row-like” view)
● AEVT – all datoms (SQL “column-like” view)
● AVET – unique datoms
● VAET – reference attributes
EAVT
● EAVT – all datoms (SQL “row-like” view)
134 name Tim 4592 add
586 city 32 1975 add
586 gender male 4592 add
586 name John 4592 add
976 name Rob 4938 add
AEVT
● AEVT – all datoms (SQL “column-like” view)
city 986 32 1975 add
name 134 Tim 4592 add
name 576 Rob 4938 add
name 986 John 4592 add
title 367 Lord Jim 4592 add
AVET
● AVET – unique datoms
city 32 986 1975 add
name John 986 4592 add
name Rob 576 4938 add
name Tim 134 4592 add
title Lord Jim 367 4592 add
VAET
● VAET – reference attributes
15 author 841 1975 add
32 city 134 4592 add
269 city 576 4938 add
517 city 986 4592 add
male gender 986 4592 add
Value of DB
● View of db is a value
● Immutable
● Graph of entities and their attributes
● Direct iterable access to indices
● DB value is a param to queries and functions
Datalog
● Default query language
● Declarative – WHAT not HOW
● Logic – patterns matching
● Logical variables
Query structure
● :find – projection clause, similar to SELECT
● :in – binding arguments
– Implicit for some queries
● :where – restriction clause
● Most of the logic would be in :where clause
Simple schema
person
name Joseph Conrad
name George Orwell
genre
type novel
type fiction
Schema
book
:book/author Joseph Conrad
:book/title Lord Jim
:book/genre novel
Simple Query
● Find titles for all books
[:find ?title
 :where [?book :book/title ?title]]
↓ ↓ ↓
        (Entity Attribute  Value)
● Binding on ?title and ?book
● Find all book titles for Joseph Conrad
[:find ?title
 :where [?book :book/author ?author]
  [?author :person/name “Joseph Conrad”]
  [?book :book/title ?title]]
[:find ?title
 :where [?book :book/author ?author]
  [?author :person/name “Joseph Conrad”]
  [?book :book/title ?title]]
● ?book resolves to the same entity
● ?author resolves to the same entity
Order in query
[:find ?title
 :where 
  [?author :person/name “Joseph Conrad”]
  [?book :book/author ?author]   
  [?book :book/title ?title]]
● Queries are semantically similar
● Marginal performance difference
● Provide specific datoms first
Even more attributes in query
[:find ?title ?author ?year
 :where
 [?b :book/genre :genre.type/novel] 
 [?b :book/year ?year]
 [?b :book/author ?p]
 [?p :person/name ?author]
 [?b :book/title ?title]]
Pull API
● New addition to Datomic
● Allows easy access to datom's attributes
● Provides a number of patterns for querying
Wildcard pattern
● Return all attributes with *
(pull
  database­value
  '[*]
  entity­id)
Specific attributes
● Use pattern to return specific attributes
(pull
  database­value
  '[:book/title :book/genre]
  lord­jim)
Schema with reference
{:db/id #db/id[:db.part/db]
:db/ident :book/genre
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "Book's genre"
:db.install/_attribute :db.part/db}
Lookup reverse
● Navigate backwards from declared reference
● Get fiction books
(pull
  database­value
  '[:book/_genre]
  :genre.type/fiction)
German philosophers
● Kepler (1571 - 1630)
● Leibniz (1646 - 1716)
● Kant (1724 - 1804)
● Hegel (1770 - 1831)
● Heidegger (1889 – 1976)
● attribute :person/influenced-by
Recursion
● Who influenced Kant?
(pull
  database­value
  '[:person/name {:person/influenced­by 5}]
  kant)
● Gottfried Leibniz <= Kepler
● Kepler (1571 - 1630)
● Leibniz (1646 - 1716)
● Kant (1724 - 1804)
● Hegel (1770 - 1831)
● Heidegger (1889 – 1976)
Recursion + reverse lookup
● Who was influenced by Kant?
(pull
  database­value
  '[:person/name {:person/_influenced­by 5}]
 kant)
● Hegel => Heidegger
Java methods
[:find ?name
 :where 
 [?p :person/name ?name]
 [(.startsWith ?name "M")]]
Functions
● Atomic transformations
● Integrity checks
● Constraints
DB function components
● Function is a data structure
● Declared with :db/fn
● Optional docs
● Clojure or java
● Parameters
● Require (Clojure) or import (Java) block
● Your code
DB function
{:db/ident :get­k­volume
 :db/doc "Gets number of book copies in 1000s”
 :db/fn #db/fn 
   {:lang "clojure"
    :params [no­of­copies]  
    :requires [[datomic­book.utils :refer [format­k]]]
    :code [(format­k (/ no­of­copies 1000) )]}}
Using db functions
(invoke
  database­value
  :get­k­volume
  4000)
=> ["4 K"]
Validation function
{:db/ident :validate­book
  :db/fn #db/fn
    {:lang "clojure"
     :params [book]
     :requires [[clojure.string :as str]]
     :code (let [required #{:book/title :book/author}
                 missing (remove book required)]
                 (if­let [missing (seq missing)]
                    (throw (RuntimeException. 
                              (str "Missing attributes"
                              (str/join ", " missing))))
                     book))}}
Construction function
{:db/ident :validate­and­construct­book
 :db/fn #db/fn
  {:lang "clojure"
   :params [db m]
   :code (let [book (merge {:db/id
                          (tempid :db.part/user)}
                            m)
               validate (→ (entity db :validate­book)
                            :db/fn)]
               [(validate book)])}}
(transact
   database­value
   [[:validate­and­construct­book
     {:book/title "Victory"
      :book/author joseph­conrad}]])
Database filters
● Filter DB value based on some predicate
● Keep only relevant datoms
● Built-in filters and custom filters
● Filters allow for one set of queries operating on
different db values
As-of
● Returns DB value “as of” particular point in time
● Ignores any transactions after that point
● Point-in-time could be:
– Transaction id
– java.util.Date instance
– Time-basis (t) of database
● What was the DB last week, month etc?
(find­population
  (as­of database berlin­1850­tx­date)
  berlin)
Since
● Opposite of as-of
● Returns value of database that includes only
datoms added after certain point in time
● What were the transactions after X point in
time?
(find­population
  (since database berlin­1850­tx­date)
  berlin)
Latest changes
(def tx­time #inst "2014­12­25T10:33:16.436­00:00")
(map :e (datoms (since berlin­1850 tx­time) :eavt))
● Get datoms from filtered db using since
● Get datoms using :eavt index
● Get entity ids from datoms
history
● Present and all of the past unfiltered
● Complete history of entity
● Or group of entities
(­>> (d/q '[:find ?aname ?v ?inst
            :in $ ?e
            :where [?e ?a ?v ?tx true]
            [?tx :db/txInstant ?inst]
            [?a :db/ident ?aname]]
          (history database) berlin)
     (filter
       #(some #{:city/population} %))
     (sort­by #(nth % 2)))
([:city/population 260000 Wed Dec 31 08:57:09 GMT 2014]
 [:city/population 383000 Thu Jan 01 06:00:55 GMT 2015])
Filtering errors
● Custom filter for:
– incorrect datoms
– Not applicable data at some point in time
– Security reasons
● Add “wrong” population
(def berlin­error
  @(transact
     connection
     [{:db/id           berlin
       :city/population 999999}]))
(def error­tx­id
  (:tx (first (berlin­error :tx­data))))
(def error­txes
  "Known bad transactions"
  #{error­tx­id})
(defn correct?
  [_ datom]
  (not (contains? error­txes (:tx datom))))
(def corrected (filter (berlin­history) correct?))
(get­population­history corrected)
; id population tx
=> #{[17592186045421 383000 13194139534329] 
[17592186045421 139700 13194139534327] 
[17592186045421 163600 13194139534328] 
[17592186045421 686000 13194139534331] 
[17592186045421 63400 13194139534324] 
[17592186045421 39000 13194139534313]}
● Still more from Datomic:
– Negation in query
– Retraction
– Excision – true removal
– Partitioning
– Transactions
– with – state with proposed additions
● What would happen if we did x?
– More in depth on covered topics
Resources
● http://docs.datomic.com
● http://www.datomic.com/training.html
● http://www.datomic.com/videos.html
● http://www.learndatalogtoday.org
Thank you
● Datomic is awesome
● konrad_szydlo@yahoo.co.uk
● @ryujinkony

More Related Content

What's hot

MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)Uwe Printz
 
NoSQL Tel Aviv Meetup#1: NoSQL Data Modeling
NoSQL Tel Aviv Meetup#1: NoSQL Data ModelingNoSQL Tel Aviv Meetup#1: NoSQL Data Modeling
NoSQL Tel Aviv Meetup#1: NoSQL Data ModelingNoSQL TLV
 
NoSQL: Why, When, and How
NoSQL: Why, When, and HowNoSQL: Why, When, and How
NoSQL: Why, When, and HowBigBlueHat
 
Modeling JSON data for NoSQL document databases
Modeling JSON data for NoSQL document databasesModeling JSON data for NoSQL document databases
Modeling JSON data for NoSQL document databasesRyan CrawCour
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC
 
Connect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast LaneConnect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast LaneHoward Greenberg
 
[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced Features
[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced Features[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced Features
[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced FeaturesAndrew Liu
 
OData support in Cast Iron 7.5.1
OData support in Cast Iron 7.5.1OData support in Cast Iron 7.5.1
OData support in Cast Iron 7.5.1Sarath Ambadas
 
Change RelationalDB to GraphDB with OrientDB
Change RelationalDB to GraphDB with OrientDBChange RelationalDB to GraphDB with OrientDB
Change RelationalDB to GraphDB with OrientDBApaichon Punopas
 
RavenDB - Indexes Deep Dive
RavenDB - Indexes Deep DiveRavenDB - Indexes Deep Dive
RavenDB - Indexes Deep DiveAlonso Robles
 
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...Aaron Saray
 
MongoDB - An Agile NoSQL Database
MongoDB - An Agile NoSQL DatabaseMongoDB - An Agile NoSQL Database
MongoDB - An Agile NoSQL DatabaseGaurav Awasthi
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIOliver Busse
 
Killing Shark-Riding Dinosaurs with ORM
Killing Shark-Riding Dinosaurs with ORMKilling Shark-Riding Dinosaurs with ORM
Killing Shark-Riding Dinosaurs with ORMOrtus Solutions, Corp
 
Google App Engine - exploiting limitations
Google App Engine - exploiting limitationsGoogle App Engine - exploiting limitations
Google App Engine - exploiting limitationsTomáš Holas
 
Development without Constraint
Development without ConstraintDevelopment without Constraint
Development without ConstraintChad Davis
 

What's hot (20)

Lokijs
LokijsLokijs
Lokijs
 
Intro to RavenDB
Intro to RavenDBIntro to RavenDB
Intro to RavenDB
 
MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)MongoDB for Coder Training (Coding Serbia 2013)
MongoDB for Coder Training (Coding Serbia 2013)
 
NoSQL Tel Aviv Meetup#1: NoSQL Data Modeling
NoSQL Tel Aviv Meetup#1: NoSQL Data ModelingNoSQL Tel Aviv Meetup#1: NoSQL Data Modeling
NoSQL Tel Aviv Meetup#1: NoSQL Data Modeling
 
NoSQL: Why, When, and How
NoSQL: Why, When, and HowNoSQL: Why, When, and How
NoSQL: Why, When, and How
 
Modeling JSON data for NoSQL document databases
Modeling JSON data for NoSQL document databasesModeling JSON data for NoSQL document databases
Modeling JSON data for NoSQL document databases
 
FITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JSFITC presents: Mobile & offline data synchronization in Angular JS
FITC presents: Mobile & offline data synchronization in Angular JS
 
Level DB - Quick Cheat Sheet
Level DB - Quick Cheat SheetLevel DB - Quick Cheat Sheet
Level DB - Quick Cheat Sheet
 
RavenDB Overview
RavenDB OverviewRavenDB Overview
RavenDB Overview
 
Connect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast LaneConnect 2016-Move Your XPages Applications to the Fast Lane
Connect 2016-Move Your XPages Applications to the Fast Lane
 
[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced Features
[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced Features[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced Features
[PASS Summit 2016] Azure DocumentDB: A Deep Dive into Advanced Features
 
OData support in Cast Iron 7.5.1
OData support in Cast Iron 7.5.1OData support in Cast Iron 7.5.1
OData support in Cast Iron 7.5.1
 
Change RelationalDB to GraphDB with OrientDB
Change RelationalDB to GraphDB with OrientDBChange RelationalDB to GraphDB with OrientDB
Change RelationalDB to GraphDB with OrientDB
 
RavenDB - Indexes Deep Dive
RavenDB - Indexes Deep DiveRavenDB - Indexes Deep Dive
RavenDB - Indexes Deep Dive
 
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
 
MongoDB - An Agile NoSQL Database
MongoDB - An Agile NoSQL DatabaseMongoDB - An Agile NoSQL Database
MongoDB - An Agile NoSQL Database
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
 
Killing Shark-Riding Dinosaurs with ORM
Killing Shark-Riding Dinosaurs with ORMKilling Shark-Riding Dinosaurs with ORM
Killing Shark-Riding Dinosaurs with ORM
 
Google App Engine - exploiting limitations
Google App Engine - exploiting limitationsGoogle App Engine - exploiting limitations
Google App Engine - exploiting limitations
 
Development without Constraint
Development without ConstraintDevelopment without Constraint
Development without Constraint
 

Viewers also liked

8 things I like about Datomic
8 things I like about Datomic8 things I like about Datomic
8 things I like about Datomicdatablend
 
Griffin: Grouping Suspicious Memory-Access Patterns to Improve Understanding...
Griffin: Grouping Suspicious Memory-Access Patterns to Improve Understanding...Griffin: Grouping Suspicious Memory-Access Patterns to Improve Understanding...
Griffin: Grouping Suspicious Memory-Access Patterns to Improve Understanding...Sangmin Park
 
CarFast: Achieving Higher Statement Coverage Faster
CarFast: Achieving Higher Statement Coverage FasterCarFast: Achieving Higher Statement Coverage Faster
CarFast: Achieving Higher Statement Coverage FasterSangmin Park
 
Falcon: Fault Localization in Concurrent Programs
Falcon: Fault Localization in Concurrent ProgramsFalcon: Fault Localization in Concurrent Programs
Falcon: Fault Localization in Concurrent ProgramsSangmin Park
 
Datomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionadaDatomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionadaLuiz Alberto Hespanha
 
Effective Fault-Localization Techniques for Concurrent Software
Effective Fault-Localization Techniques for Concurrent SoftwareEffective Fault-Localization Techniques for Concurrent Software
Effective Fault-Localization Techniques for Concurrent SoftwareSangmin Park
 
Testing Concurrent Programs to Achieve High Synchronization Coverage
Testing Concurrent Programs to Achieve High Synchronization CoverageTesting Concurrent Programs to Achieve High Synchronization Coverage
Testing Concurrent Programs to Achieve High Synchronization CoverageSangmin Park
 
Hitchhiker Trees - Strangeloop 2016
Hitchhiker Trees - Strangeloop 2016Hitchhiker Trees - Strangeloop 2016
Hitchhiker Trees - Strangeloop 2016David Greenberg
 
PyCon APAC 2016 Keynote
PyCon APAC 2016 KeynotePyCon APAC 2016 Keynote
PyCon APAC 2016 KeynoteWes McKinney
 
Apache Arrow and Python: The latest
Apache Arrow and Python: The latestApache Arrow and Python: The latest
Apache Arrow and Python: The latestWes McKinney
 
Huohua: A Distributed Time Series Analysis Framework For Spark
Huohua: A Distributed Time Series Analysis Framework For SparkHuohua: A Distributed Time Series Analysis Framework For Spark
Huohua: A Distributed Time Series Analysis Framework For SparkJen Aman
 
Python Data Ecosystem: Thoughts on Building for the Future
Python Data Ecosystem: Thoughts on Building for the FuturePython Data Ecosystem: Thoughts on Building for the Future
Python Data Ecosystem: Thoughts on Building for the FutureWes McKinney
 
Python Data Wrangling: Preparing for the Future
Python Data Wrangling: Preparing for the FuturePython Data Wrangling: Preparing for the Future
Python Data Wrangling: Preparing for the FutureWes McKinney
 
Raising the Tides: Open Source Analytics for Data Science
Raising the Tides: Open Source Analytics for Data ScienceRaising the Tides: Open Source Analytics for Data Science
Raising the Tides: Open Source Analytics for Data ScienceWes McKinney
 
Improving Python and Spark (PySpark) Performance and Interoperability
Improving Python and Spark (PySpark) Performance and InteroperabilityImproving Python and Spark (PySpark) Performance and Interoperability
Improving Python and Spark (PySpark) Performance and InteroperabilityWes McKinney
 
Mesos: The Operating System for your Datacenter
Mesos: The Operating System for your DatacenterMesos: The Operating System for your Datacenter
Mesos: The Operating System for your DatacenterDavid Greenberg
 

Viewers also liked (17)

Datomic
DatomicDatomic
Datomic
 
8 things I like about Datomic
8 things I like about Datomic8 things I like about Datomic
8 things I like about Datomic
 
Griffin: Grouping Suspicious Memory-Access Patterns to Improve Understanding...
Griffin: Grouping Suspicious Memory-Access Patterns to Improve Understanding...Griffin: Grouping Suspicious Memory-Access Patterns to Improve Understanding...
Griffin: Grouping Suspicious Memory-Access Patterns to Improve Understanding...
 
CarFast: Achieving Higher Statement Coverage Faster
CarFast: Achieving Higher Statement Coverage FasterCarFast: Achieving Higher Statement Coverage Faster
CarFast: Achieving Higher Statement Coverage Faster
 
Falcon: Fault Localization in Concurrent Programs
Falcon: Fault Localization in Concurrent ProgramsFalcon: Fault Localization in Concurrent Programs
Falcon: Fault Localization in Concurrent Programs
 
Datomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionadaDatomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionada
 
Effective Fault-Localization Techniques for Concurrent Software
Effective Fault-Localization Techniques for Concurrent SoftwareEffective Fault-Localization Techniques for Concurrent Software
Effective Fault-Localization Techniques for Concurrent Software
 
Testing Concurrent Programs to Achieve High Synchronization Coverage
Testing Concurrent Programs to Achieve High Synchronization CoverageTesting Concurrent Programs to Achieve High Synchronization Coverage
Testing Concurrent Programs to Achieve High Synchronization Coverage
 
Hitchhiker Trees - Strangeloop 2016
Hitchhiker Trees - Strangeloop 2016Hitchhiker Trees - Strangeloop 2016
Hitchhiker Trees - Strangeloop 2016
 
PyCon APAC 2016 Keynote
PyCon APAC 2016 KeynotePyCon APAC 2016 Keynote
PyCon APAC 2016 Keynote
 
Apache Arrow and Python: The latest
Apache Arrow and Python: The latestApache Arrow and Python: The latest
Apache Arrow and Python: The latest
 
Huohua: A Distributed Time Series Analysis Framework For Spark
Huohua: A Distributed Time Series Analysis Framework For SparkHuohua: A Distributed Time Series Analysis Framework For Spark
Huohua: A Distributed Time Series Analysis Framework For Spark
 
Python Data Ecosystem: Thoughts on Building for the Future
Python Data Ecosystem: Thoughts on Building for the FuturePython Data Ecosystem: Thoughts on Building for the Future
Python Data Ecosystem: Thoughts on Building for the Future
 
Python Data Wrangling: Preparing for the Future
Python Data Wrangling: Preparing for the FuturePython Data Wrangling: Preparing for the Future
Python Data Wrangling: Preparing for the Future
 
Raising the Tides: Open Source Analytics for Data Science
Raising the Tides: Open Source Analytics for Data ScienceRaising the Tides: Open Source Analytics for Data Science
Raising the Tides: Open Source Analytics for Data Science
 
Improving Python and Spark (PySpark) Performance and Interoperability
Improving Python and Spark (PySpark) Performance and InteroperabilityImproving Python and Spark (PySpark) Performance and Interoperability
Improving Python and Spark (PySpark) Performance and Interoperability
 
Mesos: The Operating System for your Datacenter
Mesos: The Operating System for your DatacenterMesos: The Operating System for your Datacenter
Mesos: The Operating System for your Datacenter
 

Similar to The power of datomic

Code Cleanup: A Data Scientist's Guide to Sparkling Code
Code Cleanup: A Data Scientist's Guide to Sparkling CodeCode Cleanup: A Data Scientist's Guide to Sparkling Code
Code Cleanup: A Data Scientist's Guide to Sparkling CodeCorrie Bartelheimer
 
Introducing Apache Spark's Data Frames and Dataset APIs workshop series
Introducing Apache Spark's Data Frames and Dataset APIs workshop seriesIntroducing Apache Spark's Data Frames and Dataset APIs workshop series
Introducing Apache Spark's Data Frames and Dataset APIs workshop seriesHolden Karau
 
Introduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastIntroduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastHolden Karau
 
Utilising the data attribute
Utilising the data attributeUtilising the data attribute
Utilising the data attributeRichard Martens
 
How and Where in GLORP
How and Where in GLORPHow and Where in GLORP
How and Where in GLORPESUG
 
NoSQL, no Limits, lots of Fun!
NoSQL, no Limits, lots of Fun!NoSQL, no Limits, lots of Fun!
NoSQL, no Limits, lots of Fun!Otávio Santana
 
Elgg solr presentation
Elgg solr presentationElgg solr presentation
Elgg solr presentationbeck24
 
Database madness with_mongoengine_and_sql_alchemy
Database madness with_mongoengine_and_sql_alchemyDatabase madness with_mongoengine_and_sql_alchemy
Database madness with_mongoengine_and_sql_alchemyJaime Buelta
 
Glorp Tutorial Guide
Glorp Tutorial GuideGlorp Tutorial Guide
Glorp Tutorial GuideESUG
 
Swift Micro-services and AWS Technologies
Swift Micro-services and AWS TechnologiesSwift Micro-services and AWS Technologies
Swift Micro-services and AWS TechnologiesSimonPilkington8
 
PofEAA and SQLAlchemy
PofEAA and SQLAlchemyPofEAA and SQLAlchemy
PofEAA and SQLAlchemyInada Naoki
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
The Return of the Living Datalog
The Return of the Living DatalogThe Return of the Living Datalog
The Return of the Living DatalogMike Fogus
 
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...Hakka Labs
 
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformationLars Marius Garshol
 
Florida Man Uses Cache as Database.pdf
Florida Man Uses Cache as Database.pdfFlorida Man Uses Cache as Database.pdf
Florida Man Uses Cache as Database.pdfStephen Lorello
 
Beyond Wordcount with spark datasets (and scalaing) - Nide PDX Jan 2018
Beyond Wordcount  with spark datasets (and scalaing) - Nide PDX Jan 2018Beyond Wordcount  with spark datasets (and scalaing) - Nide PDX Jan 2018
Beyond Wordcount with spark datasets (and scalaing) - Nide PDX Jan 2018Holden Karau
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScriptJorg Janke
 

Similar to The power of datomic (20)

Code Cleanup: A Data Scientist's Guide to Sparkling Code
Code Cleanup: A Data Scientist's Guide to Sparkling CodeCode Cleanup: A Data Scientist's Guide to Sparkling Code
Code Cleanup: A Data Scientist's Guide to Sparkling Code
 
Introducing Apache Spark's Data Frames and Dataset APIs workshop series
Introducing Apache Spark's Data Frames and Dataset APIs workshop seriesIntroducing Apache Spark's Data Frames and Dataset APIs workshop series
Introducing Apache Spark's Data Frames and Dataset APIs workshop series
 
Introduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastIntroduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at last
 
Utilising the data attribute
Utilising the data attributeUtilising the data attribute
Utilising the data attribute
 
How and Where in GLORP
How and Where in GLORPHow and Where in GLORP
How and Where in GLORP
 
NoSQL, no Limits, lots of Fun!
NoSQL, no Limits, lots of Fun!NoSQL, no Limits, lots of Fun!
NoSQL, no Limits, lots of Fun!
 
Elgg solr presentation
Elgg solr presentationElgg solr presentation
Elgg solr presentation
 
Database madness with_mongoengine_and_sql_alchemy
Database madness with_mongoengine_and_sql_alchemyDatabase madness with_mongoengine_and_sql_alchemy
Database madness with_mongoengine_and_sql_alchemy
 
Glorp Tutorial Guide
Glorp Tutorial GuideGlorp Tutorial Guide
Glorp Tutorial Guide
 
Swift Micro-services and AWS Technologies
Swift Micro-services and AWS TechnologiesSwift Micro-services and AWS Technologies
Swift Micro-services and AWS Technologies
 
Slickdemo
SlickdemoSlickdemo
Slickdemo
 
PofEAA and SQLAlchemy
PofEAA and SQLAlchemyPofEAA and SQLAlchemy
PofEAA and SQLAlchemy
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Week3
Week3Week3
Week3
 
The Return of the Living Datalog
The Return of the Living DatalogThe Return of the Living Datalog
The Return of the Living Datalog
 
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
Introduction to InfluxDB, an Open Source Distributed Time Series Database by ...
 
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformation
 
Florida Man Uses Cache as Database.pdf
Florida Man Uses Cache as Database.pdfFlorida Man Uses Cache as Database.pdf
Florida Man Uses Cache as Database.pdf
 
Beyond Wordcount with spark datasets (and scalaing) - Nide PDX Jan 2018
Beyond Wordcount  with spark datasets (and scalaing) - Nide PDX Jan 2018Beyond Wordcount  with spark datasets (and scalaing) - Nide PDX Jan 2018
Beyond Wordcount with spark datasets (and scalaing) - Nide PDX Jan 2018
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScript
 

Recently uploaded

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfCionsystems
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 

Recently uploaded (20)

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 

The power of datomic