Open3
offline first db
動機
某クリッカーゲーム見てたら、なんかブラウザで動く放置ゲー作りたくなってきたので、バックエンドを探してる。基本オフラインで動いて、必要に応じて background sync できるといい。
Offline-First Database Options for Web Applications in 2020: 2020 年時点のまとめ
本当は prisma が使いたかったがブラウザで動かない。
ブラウザで sql(ite) が動く系 (js or wasm)
- sql-js/sql.js: A javascript library to run SQLite on the web. sqlite の wasm ビルド
- agershun/alasql: AlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or Excel.: インメモリ SQL
- pubkey/rxdb: 🔄 A realtime Database for JavaScript Applications 基本は stream base の Firebase Alternative。 sql.js を backend にできる
- jlongster/absurd-sql: sqlite3 in ur indexeddb (hopefully a better backend soon): Indexeddb を backend にした sql.js
- typeorm/browser-example: Example how to use TypeORM in the browser with WebSQL.
ロマン構成なら rxdb + sql.js + absurd-sql かな。作れるか試してみる。
KVS 系
- PouchDB, the JavaScript Database that Syncs! 分散 KVS Backend + Client
- orbitdb/orbit-db: Peer-to-Peer Databases for the Decentralized Web P2P ベースの分散DB
- orbitdb/ipfs-log: Append-only log CRDT on IPFS orbit-db で使われてる 追記 only の DB
Framework
Realtime State Sync
考えてる構成
- オフラインファースト: 基本的な操作はローカルDBで完結
- Verifier: 定期的にサーバーにログを送って、クライアント上の状態と、サーバー上のロジックで同じ状態が一致するか確認する。もし一致しない場合、サーバー上の状態で sync する。基本は送られるまで sync しない。verify されたらログは捨ててスナップショットだけにする。
- ユーザーがサーバーから与えられた verfied flag を持っている場合、オンライン要素を使える。マーケットとか作りたいね。
- P2P で相互 verify できるならプライベートブロックチェーンみたいな感じにする。
offline progression
裏側で定期実行しない。常に最終変更のタイムスタンプを保持し、ローカルで最終状態からその差分だけ進捗させる。
TODO: 通知系はどうする?一時間に一回ぐらい定期実行する?クッキークリッカーみたいに短い tick ではなく、1sec, 60sec の tick でベースを組むと良さそう。
通知を使用から落とすとか、タスクの終了予定時間を計算するとかのがいい気がする。本当に終わってるかどうかは問わない。
ログインするとコメントできます