Open3

offline first db

mizchimizchi

動機

某クリッカーゲーム見てたら、なんかブラウザで動く放置ゲー作りたくなってきたので、バックエンドを探してる。基本オフラインで動いて、必要に応じて background sync できるといい。

Offline-First Database Options for Web Applications in 2020: 2020 年時点のまとめ

本当は prisma が使いたかったがブラウザで動かない。

ブラウザで sql(ite) が動く系 (js or wasm)

ロマン構成なら rxdb + sql.js + absurd-sql かな。作れるか試してみる。

KVS 系

Framework

Realtime State Sync

mizchimizchi

考えてる構成

  • オフラインファースト: 基本的な操作はローカルDBで完結
  • Verifier: 定期的にサーバーにログを送って、クライアント上の状態と、サーバー上のロジックで同じ状態が一致するか確認する。もし一致しない場合、サーバー上の状態で sync する。基本は送られるまで sync しない。verify されたらログは捨ててスナップショットだけにする。
  • ユーザーがサーバーから与えられた verfied flag を持っている場合、オンライン要素を使える。マーケットとか作りたいね。
  • P2P で相互 verify できるならプライベートブロックチェーンみたいな感じにする。
mizchimizchi

offline progression

裏側で定期実行しない。常に最終変更のタイムスタンプを保持し、ローカルで最終状態からその差分だけ進捗させる。

TODO: 通知系はどうする?一時間に一回ぐらい定期実行する?クッキークリッカーみたいに短い tick ではなく、1sec, 60sec の tick でベースを組むと良さそう。

通知を使用から落とすとか、タスクの終了予定時間を計算するとかのがいい気がする。本当に終わってるかどうかは問わない。