2
1
3
4
5
6
wat?
Ethos
Business
Product
Internals
Roadmap
1
wat?
1980
1990
2
3
1st Wave:
shrink wrap
2nd Wave:
open core
(also dual-licensing, but let's not
worry about that right now)
3rd Wave:
SaaS, mostly
Commercial
Community
Control
Central
Control
Altruistic
endb
Proton
Minio
Neon
Metabase
Firefox
Cassandra
Spark
Arrow
Debian
Emacs
Clojure
It may seem naïve to assume we can make money building a SaaS database (DBaaS) in a world of Amazons, Googles, and Microsofts ... but there's big money thrown at much less adventurous products.
$30 million, eh
"I don't want to babysit a database."
"If you can give me a developer back, your DB is worth at least $100,000 / yr"
"Just solve a small, boring problem ... audits, reconciliation, ML model replay ..."
4
A still more glorious dawn is ... uh, dawning.
(Caveat: Still plenty of work to do before we achieve this = why the repo isn't open yet.)
{ "first_name": "Ravi Chandra",
"last_name": "Padmala",
"email_address": "n@neena.ca",
"is_alive": true,
"age": 30,
"height_cm": 185.2,
"billing_address": {
"address": "902 Main Street, Juiceville",
"city": "Hyderabad",
"state": "Telangana",
"pin": "500002"
},
"shipping_address": {
"address": "Nilenso Research, A-4 Research Drive",
"city": "Hyderabad",
"state": "Telangana",
"pin": 500001"
},
...
}
"address2"?
"country"?
SQL:2023
...
SQL:2016
SQL:99
SQL:2011
this one is actually really, really hard
... which is why you've never seen it before
INSERT INTO users (id, username)
VALUES (123, 'shivam');
INSERT INTO channels (id, topic)
VALUES (456, '#off-grid');
INSERT INTO messages (user_id, channel_id, msg)
VALUES (123, 456, '14awg @ 70volts');
SELECT * FROM messages WHERE channel_id = 456;
SELECT name, system_time_start, system_time_end
FROM users
FOR SYSTEM_TIME AS OF 2018-01-02T00:00:00Z;
RFC 3339 >= ISO 8601
ISO 8601
RFC
3339
ERASE FROM users WHERE username = 'shivam';
SQL:2023 (inspired)
INSERT INTO channels {id: 654,
name: "#on-grid",
access:
{mods: [100, 200, 300]
...},
...};
SELECT u.access.mods[2] FROM users u;
SELECT u FROM users u; -- select a document(s)
SQL:2016 SQL/JSON
+
ECMAScript
LET c = [1, 2, 3];
LET d = 41;
INSERT INTO users {a: 1, -- shorthand
b: [...c, 4], -- spreads
c[d+1]: [3, 4] -- computed
}
SELECT u.a, u.b, u.c42 FROM users u;
SQL:2016 SQL/JSON
+
ECMAScript
-- get an array of names:
SELECT c.events[*].name FROM channels c;
schema migration
audits
reconciliation
GDPR compliance
replication
OLAP pipelines
failover
sharding
etc.
5
SQL parser
SQL compiler
execution
engine
columnar
storage
time travel
storage
vs.
compute
plastic SQL
(UX)
adaptive
indexes
bitemporal
indexes
storage
vs.
compute
"Light and Adaptive Indexing for Immutable Databases" by Håkan Råberg (Strange Loop 2022)
adaptive
indexes
(uni-temporal)
time travel
bitemporal
indexes
read-only
read-write
3 years
5 years
Yes, some of these papers are very old. (But not all.)
People were trying things back in 1985 that hardware has only caught up to now ... similar to LISP in the 1950s.
Speaking of LISP...
Common Lisp gives us the plasticity to iterate quickly, throw things out, experiment. It's nice not to write a dynamic runtime from scratch.
SBCL is fast. C bindings are clunky, but they work.
Moving code to Rust "calcifies" it, so that's a late-bound activity.
Copeland's DSM paper was published in 1980.
Apache Arrow is a modern avatar of the DSM.
6
SELECT ... AS OF ...)
2
1
3
4
5
6
wat?
Ethos
Business
Product
Internals
Roadmap