More Related Content Similar to FleetDB A Schema-Free Database in Clojure Similar to FleetDB A Schema-Free Database in Clojure (20) More from elliando dias (20) FleetDB A Schema-Free Database in Clojure5. Walkthrough
Client Quickstart
Basic Queries
Concurrency Tools
6. Client Quickstart
(use ’fleetdb.client)
(def client (connect))
(client ["ping"])
=> "pong"
7. Insert
(client
["insert" "accounts"
{"id" 1 "owner" "Eve" "credits" 100}])
8. Insert
(client
["insert" "accounts"
{"id" 1 "owner" "Eve" "credits" 100}])
=> 1
10. Select
(client
["select" "accounts" {"where" ["=" "id" 1]}])
=> [{"id" 1 "owner" "Eve" "credits" 100}]
12. Select with Order and Limit
(client
["select" "accounts"
{"order" ["credits" "asc"] "limit" 2}])
13. Update
(client
["update" "accounts" {"credits" 105}
{"where" ["=" "owner" "Eve"]}])
14. Explain (I)
(client
["explain" ["select" "accounts"
{"where" ["=" "owner" "Eve"]}]])
15. Explain (I)
(client
["explain" ["select" "accounts"
{"where" ["=" "owner" "Eve"]}]])
=> ["filter" ["=" "owner" "Eve"]
["collection-scan" "accounts"]]
16. Create Index
(client
["create-index" "accounts" "owner"])
17. Explain (II)
(client
["explain" ["select" "accounts"
{"where" ["=" "owner" "Eve"]}]])
=> ["index-lookup" ["accounts" "owner" "Eve"]]]
20. Multi-Write
(client
["multi-write"
[write-query-1 write-query-2 ...]])
=> [result-1 result-2 ...]
23. Checked-Write
(client
["checked-write"
read-query
expected-read-result
write-query])
=> [true write-result]
24. Checked-Write
(client
["checked-write"
read-query
expected-read-result
write-query])
=> [true write-result]
=> [false actual-read-result]
26. Background
http://clojure.org/data_structures
http://clojure.org/sequences
http://clojure.org/state
29. Organization
fleetdb.core: pure functions
fleetdb.embedded: identity and durability
30. Organization
fleetdb.core: pure functions
fleetdb.embedded: identity and durability
fleetdb.server: network interface
32. fleetdb.core
Pure functions
Databases as Clojure data structures
33. fleetdb.core
Pure functions
Databases as Clojure data structures
Read: db + query → result
34. fleetdb.core
Pure functions
Databases as Clojure data structures
Read: db + query → result
‘Write’: db + query → result + new db
38. fleetdb.core Query Planner
Implements declarative queries
Database + query → plan
["select" "accounts"
{"where" ["=" "owner" "Eve"]}]
39. fleetdb.core Query Planner
Implements declarative queries
Database + query → plan
["select" "accounts"
{"where" ["=" "owner" "Eve"]}]
["filter" ["=" "owner" "Eve"]
["record-scan" "accounts"]]
40. fleetdb.core Query Planner
Implements declarative queries
Database + query → plan
["select" "accounts"
{"where" ["=" "owner" "Eve"]}]
["filter" ["=" "owner" "Eve"]
["record-scan" "accounts"]]
["index-lookup" ["accounts" "owner" "Eve"]]
44. fleetdb.core Query Executor
Database + plan → result
["filter" ["=" "owner" "Eve"]
["record-scan" "accounts"]]
(filter (fn [r] (= (r "owner") "Eve"))
(vals (:rmap (db "accounts"))))
47. fleetdb.embedded
Wraps fleetdb.core
Adds identity and durability
Databases in atoms
48. fleetdb.embedded
Wraps fleetdb.core
Adds identity and durability
Databases in atoms
Append-only log
58. fleetdb.embedded Write Path
Enter fair lock
Dereference database atom
Pass to fleetdb.core
Append query to log
Swap in new database value
59. fleetdb.embedded Write Path
Enter fair lock
Dereference database atom
Pass to fleetdb.core
Append query to log
Swap in new database value
Return result
63. Aside: Source Size
Lines of Code
core 630
embedded 130
server 120
lint 280
utilities 140
total 1300
65. Takeaways
Clojure’s data structures are awesome
66. Takeaways
Clojure’s data structures are awesome
Clojure is viable for infrastructure software
67. Takeaways
Clojure’s data structures are awesome
Clojure is viable for infrastructure software
Try FleetDB!