By Matt
Published Mar 12
54 cards
Improvements to CouchDB
4
Custom DB
2
Watermelon DB
electric sql
Pocketbase
Replicache
replicache.dev
InstantDB
Datascript 2
Initial load
One downside of a local-first approach is that the initial load of an app is often slower than a pure-cloud app.
Blitz.js
A “zero-api” framework. Backend actions can be "imported" and used in the front end. I guess this would be similar to using the same re-frame event in both the front-end and back-end.
RxDB GraphQL replication
The graphql replication works by storing a last
updated_at timestamp on the client. The client then sends a request to the server for all documents updated past that timestamp. The same works for pushes from the client to the server.InvaliDB
CouchDB access control
Database per user
Asami
An in-memory graph database, for Clojure and ClojureScript.
Datalevin
Datalevin is a simple durable Datalog database.
Hasura access control
In Hasura access-control rules are defined on the row and column level.
Firebase Security Rules
Crux
Crux is a general purpose database with graph-oriented bitemporal indexes. Datalog, SQL & EQL queries are supported, and Java, HTTP & Clojure APIs are provided.
etebase
An end-to-end encrypted open source version of firebase.
hypercore
Hypercore is a secure, distributed append-only log.
Access Control
CouchDB
Caching
Datalog
Automerge
A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically.
CRDT
Conflict Free Replicated Datatype
Materialized views
A materialized view is a bit like a cached query that, in most cases, needs to be updated manually.
Materialize
Incrementally-updated materialized views - in ANSI Standard SQL and in real time.
Feeding data to components
It is a common pattern in React to create a data "provider" component that wraps a pure component. The impure data provider component grabs its data side band and passes it as props to the pure component.
Relay in CLJS
Sample of a relay-like system for building a query graph from component fragments.
Relay
A "GraphQL client for React." Built by facebook, the key insight of Relay is that is co-locates GraphQL fragments with the components that use them. The component tree is wrapped in a
QueryRenderer which combines all of the fragments in the tree into a single GraphQL query.Data prefetching
This refers to a technique in which application state is pre-fetched server-side and injected into a server-side rendered page. Many frameworks integrate with GraphQL to handle this automatically.
PostgREST
Similar to Hasura, PostgREST is a REST API over top of a Postgres database. It is used by supabase, an open source alternative to firebase.
Hasura
Hasura is a GraphQL API on top of a Postgresql database. It embraces the idea of the client querying the database directly.
CouchDB
CouchDB is a JSON Document store with robust replication capabilities. It is fairly common that each users has their own database when using CouchDB.
PouchDB
PouchDB is a javascript implementation of CouchDB that runs in the browser and node.
Datomic
re-frame
re-frame uses subscriptions to fetch data from the
app-db. Subscriptions are reactive queries depending on their "input signals". The input signal can either be the app-db itself, or another query.Event reduce
An algorithim that optimizes the re-running of queries based on some mutation event. It is used by rxdb to create reactive queries.
Reactive queries
Queries that can be watched and automatically re-run when the underlying data changes.
RxDB
A reactive database that supports reactive queries.
Datalog
Pathom
In a nutshell: GraphQL, but in Clojure.
GraphQL
Datomic pull syntax
Contrast to Datalog
EQL
EDN Query language is a bit like Datomic pull syntax or GraphQL.