分散カウンタを簡単なカウントアップアプリで試してみます。
分散カウンタ
多くのアプリでは、いいね数やフォロワー数のためにカウントアップが必要です。
しかしFirestoreでは、制限上1つのドキュメントにつき1秒に1回しか更新することができません。
そこで分散カウンタを利用します。
1つのドキュメントにつき1秒に1回しかできないなら、
ドキュメントをたくさん作ってしまえばいいのです。
具体的な方法
- カウントアップ用のコレクションを作成します。
- カウントアップ時はランダムにコレクション内のドキュメントを1つ選び、フィールドの値をインクリメントします。
- カウント取得時は、コレクション内のドキュメントの値を合計すればOKです。
簡単なサンプル
Shards数100で100回インクリメントしたところ、96まで上がりました。
4回ほど失敗しているようです。
Shards数500でも試したら100まで到達しました。
スループットはShards数に比例しますが、
あまりにShards数を増やすとそれだけFirestoreのコストがかかるので難しいところです。
今回のコレクションとドキュメントの構成はこれです。
雑で申し訳ないのですが、今回の実験コードはこちらです。