質問: ### 前提・実現したいこと firestoreで新規のドキュメントを追加するたびに、ドキュメント数をカウントして総数を取得したいと考えています。 おすすめの実装方法がありましたら、ご教授いただけますと幸いです。 (イメージとしては、`users`コレクションの各ドキュメントのユーザ1,2,3,,,の総数を取得する感じです。) 現状、このサイトの (**データ数が多いコレクションのカウント方法**)を参考に`Cloud functions` のfirestoreトリガーを利用して実装を考えていました。 しかし、`Cloud functions`の公式ドキュメントにべき等にする必要があると記載がありました。 > > イベントは必ず 1 回以上処理されますが、1 つのイベントで関数が複数回呼び出される場合があります。「正確に 1 回」のメカニズムに依存することは避け、べき等になるように関数を記述してください。 > > > 今回のようなカウントアップの実装は`Cloud functions` のトリガーを利用すべきではないのでしょうか? (個人的には、カウントアップ実装はべき等にはならないと思っております。) 一応、べき等を考慮してfirestoreトリガーを使用しているサイトもありました。この方法がベストな方法になりそうな気がしています。 --- ここまで`Cloud functions`で実装する方法を調べてきましたが、根本的な疑問が出てきました。 クライアントサイドの`firestore`で`firebase.firestore.FieldValue.increment(1)`を用いてカウントアップを実装することは何かデメリットがあるのでしょうか?(処理が重い、readコストがかかりすぎるなど) 質問を文頭に持ってきて簡潔な文章にできませんでしたが、ご回答・ご意見いただけますと幸いです。 よろしくお願いします。
回答: 「総数」をどれくらい正確にしたいか、にもよるかと思います。 あまりよくはないかもですが、総数は正確にはならないと認識し、カウントアップをCloud Functionsで実装する手もあります。 クライアントサイドでの実装は別に悪くないと思います。 思いつくデメリットは、 * セキュリティルールで許可されていれば更新が可能なため、悪意のあるユーザーに更新される可能性があったりする * 1つのドキュメントを1秒間に約1回しか更新できないため、更新頻度によっては分散カウンタなどを考慮する必要がある(これはクライアントサイド固有の問題ではない) などでしょうか。 分散カウンタはFirebase Extensionsにもあるので、ある程度楽はできます。