bytevectors i. Keys are bytevectors ii. Keys are ordered iii. Values are bytevectors 2. Data structures: i. Red-black tree ii. B-tree iii. Log-structured merge-tree 3. Existing libraries: i. SRFI-146 ii. LevelDB, RocksDB, LMDB, Tokyo Cabinet, SQLite3 LSM extension, Oracle BerkeleyDB iii. WiredTiger iv. TiKV and FoundationDB 4. Data possibly bigger than memory 5. Data Validation Facility (wip)
key) ii. (okvs-set! transaction key value) iii. (okvs-delete! transaction key) 2. Querying primitives: i. (okvs-range txn start-key start-include? end-key end-include?) ii. (okvs-prefix-range txn prefix) 3. Lexicographic packing: i. Bytes representation of some Scheme objects ii. Preserving natural order iii. ) Ordered mapping of Scheme objects iv. Future SRFI? 4. Subspace i. First abstraction ii. Collocation of keys iii. Keys sharing a common prex 5. Anti-pattern: hiding okvs interface
lists, called tuples or chunks 2. Generalisation of triple store 3. Better at representing lists than a property graph (graphdb) 4. Query language is a pattern-matching! 5. Big indexing factor: n n 2 ! 6. See https://math.stackexchange.com/q/3146568/23663 7. Schema-on-read or Scheme-on-write (pre-write validation)
Store 2. Same interface as nstore + branch management 3. Built on-top of nstore: i. metadata: 4-tuple store ii. snapshot: n-tuple store iii. change: n+3 tuple store 4. Requires lot of disk space In the case of n=3 around 21 times the size of the data 5. Applications: i. Wikidata = WikiBase + triple store ii. Versioning data with code iii. Any workow processus that requires a peer validation 6. Change-mechanic on any structured data (pull / merge requets)
uid key value P4X432 group oasis (nstore-var 'uid) album Denitly Maybe P4X432 album Denitly Maybe (nstore-var 'uid) group (nstore-var 'group) O44413 group oasis O44413 album Morning Glory Table 2. Group that authored Denitly Maybe album (generator-map->list (lambda (x) (hasmap-ref x 'group)) (nstore-query (nstore-select txn nstore (list (nstore-var 'uid) 'album "Definitly Maybe")) (nstore-where txn store (list (nstore-var 'uid) 'group (nstore-var 'group)))))
P4X432 group oasis (nstore-var 'uid) album Denitly Maybe ((uid . P4X432)) P4X432 album Denitly Maybe (nstore-var 'uid) group (nstore-var 'group) O44413 group oasis O44413 album Morning Glory Table 3. Group that authored Denitly Maybe album (generator-map->list (lambda (x) (hasmap-ref x 'group)) (nstore-query ( ( ( ( ( ( ( ( (n n n n n n n n ns s s s s s s s st t t t t t t t to o o o o o o o or r r r r r r r re e e e e e e e e- - - - - - - - -s s s s s s s s se e e e e e e e el l l l l l l l le e e e e e e e ec c c c c c c c ct t t t t t t t t t t t t t t t t tx x x x x x x x xn n n n n n n n n n n n n n n n n ns s s s s s s s st t t t t t t t to o o o o o o o or r r r r r r r re e e e e e e e e ( ( ( ( ( ( ( ( (l l l l l l l l li i i i i i i i is s s s s s s s st t t t t t t t t ( ( ( ( ( ( ( ( (n n n n n n n n ns s s s s s s s st t t t t t t t to o o o o o o o or r r r r r r r re e e e e e e e e- - - - - - - - -v v v v v v v v va a a a a a a a ar r r r r r r r r ' ' ' ' ' ' ' ' 'u u u u u u u u ui i i i i i i i id d d d d d d d d) ) ) ) ) ) ) ) ) ' ' ' ' ' ' ' ' 'a a a a a a a a al l l l l l l l lb b b b b b b b bu u u u u u u u um m m m m m m m m " " " " " " " " "D D D D D D D D De e e e e e e e ef f f f f f f f fi i i i i i i i in n n n n n n n ni i i i i i i i it t t t t t t t tl l l l l l l l ly y y y y y y y y M M M M M M M M Ma a a a a a a a ay y y y y y y y yb b b b b b b b be e e e e e e e e" " " " " " " " ") ) ) ) ) ) ) ) )) ) ) ) ) ) ) ) ) (nstore-where txn store (list (nstore-var 'uid) 'group (nstore-var 'group)))))
P4X432 group oasis P4X432 album Denitly Maybe ((uid . P4X432) P4X432 album Denitly Maybe P4X432 group (nstore-var 'group) (group . oasis)) O44413 group oasis O44413 album Morning Glory Table 4. Group that authored Denitly Maybe album (generator-map->list (lambda (x) (hasmap-ref x 'group)) (nstore-query (nstore-select txn nstore (list (nstore-var 'uid) 'album "Definitly Maybe")) ( ( ( ( ( ( ( ( (n n n n n n n n ns s s s s s s s st t t t t t t t to o o o o o o o or r r r r r r r re e e e e e e e e- - - - - - - - -w w w w w w w w wh h h h h h h h he e e e e e e e er r r r r r r r re e e e e e e e e t t t t t t t t tx x x x x x x x xn n n n n n n n n s s s s s s s s st t t t t t t t to o o o o o o o or r r r r r r r re e e e e e e e e ( ( ( ( ( ( ( ( (l l l l l l l l li i i i i i i i is s s s s s s s st t t t t t t t t ( ( ( ( ( ( ( ( (n n n n n n n n ns s s s s s s s st t t t t t t t to o o o o o o o or r r r r r r r re e e e e e e e e- - - - - - - - -v v v v v v v v va a a a a a a a ar r r r r r r r r ' ' ' ' ' ' ' ' 'u u u u u u u u ui i i i i i i i id d d d d d d d d) ) ) ) ) ) ) ) ) ' ' ' ' ' ' ' ' 'g g g g g g g g gr r r r r r r r ro o o o o o o o ou u u u u u u u up p p p p p p p p ( ( ( ( ( ( ( ( (n n n n n n n n ns s s s s s s s st t t t t t t t to o o o o o o o or r r r r r r r re e e e e e e e e- - - - - - - - -v v v v v v v v va a a a a a a a ar r r r r r r r r ' ' ' ' ' ' ' ' 'g g g g g g g g gr r r r r r r r ro o o o o o o o ou u u u u u u u up p p p p p p p p) ) ) ) ) ) ) ) )) ) ) ) ) ) ) ) )) ) ) ) ) ) ) ) ) ))
row store ii. EAVT iii. document store iv. full-text search v. ranked set for pratical leaderboard vi. space lling curves for pratical spatial queries 2. More tooling on top of nstore and vnstore: i. Querying: SPARQL, datalog, microkanren ii. Inference and reasoner engine iii. Schema migration
with bigger-than-memory data? ) ACID transactions... 2. Experiment with incremental computation e.g. miniAdapton: i. Spreadsheet-like user experience ii. Connect several abstractions together iii. Observer pattern / Ad-hoc indices / Materialized views iv. ) Less code, more performance 3. Domain-Driven-Design: high-level representation interpreted then compiled to: i. Schema ii. Validation iii. Migration iv. Queries v. ???