automerge/rust/automerge-wasm/examples/redis-sync/README.md
2022-12-14 12:26:48 -06:00

1.2 KiB

Quick Example of Syncing Automerge Docs via Redis

The good:

  1. store the document in redis as both a compacted document save and as individual changes
  2. able to load the the saved document, and then calculate which changes are missing in a single pass
  3. uses redis (RPUSH) to get global change ordering
  4. wake all clients on new changes with redis (PUBLISH, SUBSCRIBE)
  5. elect (via SETNX) a single leader to saveIncremental() every 10 seconds
  6. said node also does a full doc save when incremental bytes are 10x the base save
  7. detects disconnection of the leader (via EXPIRE) and elects a new leader
  8. detects when a document has not been created and elects a single node to create it

The bad:

  1. redis can do binary data - i couldnt figure it out - i hex encode/decode everything
  2. there's probably a few race conditions i need to find
  3. my typescript is ass
  4. not much in the way of error handling
  5. should really be using applyPatches() but im not
  6. the api is a little funny

How to use:

$ yarn
$ yarn build

Then run

$ node client.js $DOCID

In two or three different windows and watch each client editing the same document.