sql_crdt 3.0.2 copy "sql_crdt: ^3.0.2" to clipboard
sql_crdt: ^3.0.2 copied to clipboard

Base package for Conflict-free Replicated Data Types (CRDTs) using SQL databases

Dart implementation of Conflict-free Replicated Data Types (CRDTs) using SQL databases.

This project is heavily influenced by James Long's talk CRTDs for Mortals and includes a Dart-native implementation of Hybrid Local Clocks (HLC) based on the paper Logical Physical Clocks and Consistent Snapshots in Globally Distributed Databases.

sql_crdt is based on crdt and the learnings from Libra, StoryArk and tudo.

This package is abstract and implements the base functionality for CRDTs backed by a relational database. Check sqlite_crdt and postgres_crdt for usable implementations.

See also tudo for a real-world FOSS implementation.

This package is compatible with crdt_sync, a turnkey approach for real-time network synchronization of CRDT nodes.

Notes #

sql_crdt is not an ORM. The API is essentially that of a plain old SQL database with a few behavioural changes:

  • Every table gets 3 columns automatically added: is_deleted, hlc, and modified.
  • Deleted records aren't actually removed but rather flagged in the is_deleted column.
  • A reactive watch method to subscribe to database queries.
  • Convenience methods getChangeset and merge inherited from the crdt package to sync with remote nodes.

⚠ Because deleted records are only flagged as deleted, they may need to be sanitized in order to be compliant with GDPR and similar legislation.

API #

The API is intentionally kept simple with a few methods:

  • execute to run non-select SQL queries, e.g. inserts, updates, etc.
  • query to perform a one-time query.
  • watch to receive query results whenever the database changes.
  • getChangeset to generate a serializable changeset of the local database.
  • merge to apply a remote changeset to the local database.
  • transaction a blocking mechanism that avoids running simultaneous transactions in async code.

Check the examples in sqlite_crdt and postgres_crdt for more details.

Features and bugs #

Please file feature requests and bugs in the issue tracker.

10
likes
160
pub points
49%
popularity

Publisher

verified publishercachapa.net

Base package for Conflict-free Replicated Data Types (CRDTs) using SQL databases

Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

crdt, source_span, sqlparser

More

Packages that depend on sql_crdt