LoginSignup
23
15

More than 3 years have passed since last update.

CollectionGroupを効率的に利用するためのQueryを考えた。

Posted at

こんばんは、Stamp Inc村本です。

普段はFirebaseの技術コンサルティングをやってます。
最近、古き良き大手さんと契約させて頂きました👏🏻

少しづつですが、大手さんもクラウドを使い始めて本当にいいことだなぁっと思っとります。

今日はCollectionGroupの使い方について説明しようと思います。
CollectionGroupが出てきた当初に書いた記事があるのでまずここを読んでもらって、さらに適切に使いこなすにはどうすればいいのかを考えました。

[参考] 待ち焦がれたCollectionGroupがCloud Firestoreへやってきた。

CollectionGroupがすごいのはReadではなくWrite

Cloud FirestoreではCollectionのWriteに制限が設けられています。

スクリーンショット 2019-11-14 21.47.30.png

Limit Details
Maximum write rate to a collection in which documents contain sequential values in an indexed field 500 per second

インデックス付きのCollectionへの連続的な書き込みは1秒間に500までとなります。

実際かなり大きいので問題になる場合は少ないですが、例えばアクティブユーザー全員が投稿するpostsなんて言うCollectionをRootに持っていたとすれば性能的に問題になる場面も出てくるはずです。

CollectionのWrite性能を向上させるテクニック

負荷の高いCollectionは分散させる

RootにpostsCollectionを置くのをはやめて、users/:user_idSubCollectionとしてpostsを配置しましょう。

/users/:user_id/posts/:post_id

CollectionGroupでReadする

分散させたCollectionはCollectionGroupで取得出来ます。

const snapshot = await db.collectionGroup("posts").get()

もう遅いので今日はここまで。

23
15
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
15