"Calvin's primary trade-off is that it doesn't support session transactions, so it's not well suited for SQL. Instead, transactions must be submitted atomically. Session transactions in SQL were designed for analytics, specifically human beings sitting at a workstation. They are pure overhead in a high-throughput operational context."
Is this specifically for distributed SQL only? I think there are some scalable SQL systems that don't support sessions either.
Calvin is a generalized consistency protocol, that we use in FaunaDB to support relational semantics (but not SQL) in our database.
Multi-query transactions can be useful, but the FaunaDB query language is functional, rather than declarative like SQL, so composing queries that can do everything you want is usually easier than SQL.
FaunaDB's query language makes it straightforward to do it the first way. All queries are serializable, so any preconditions checked would gate transaction commit as you would expect, and read-modify-write style transactions work.
Is the wire format roughly isomorphic to the structure above? Or does the Scala library convert this code-like structure into something simpler/flatter?
(BTW, would be nice if I could read your API docs without signing up for an account.)
It is isomorphic; right now it's layered onto JSON, but eventually we will support CBOR on the wire as well. Internally everything is CBOR with LZ4 block compression.
The docs will eventually be available without an account.
Is this specifically for distributed SQL only? I think there are some scalable SQL systems that don't support sessions either.