Firebase: Cloud Firestore: listDocuments: doc read cost 1 or N? Possible alternative to Distributed Counter?

Viewed 1352

Building a social media app and confronting the 1write/doc/sec limit. Consequently, keeping vote data in the post document will not work at scale. I have read into "Distributed Counters", but the document read/write cost scales linearly. I have been exploring the firebase functions available and am interested in "listDocuments()", which return a List of DocumentReference's

Unfortunately, digging through the documentation I cannot determine if listDocument read cost is 1 or 1/doc in the collection.

My plan is to have two subcollections per post, vote1/vote2. This removes the write bottleneck at scale. To retrieve the vote count I would like to use the length of listDocuments() on each subcollection.

I know firebase has some neat indexing tricks, but I am also curious if this is an inefficient operation on the database. i.e. will the user notice a delay when retrieving the counts?

2 Answers

Unfortunately, digging through the documentation I cannot determine if listDocument read cost is 1 or 1/doc in the collection.

Calling the listDocuments API cost one document read per document that is returned by it.

Because there is some confusion around the read costs, especially with the listDocuments() function, i want to answer this question in more detail. The answer of @Frank van Puffelen is correct, you'll get charged per returned document.

The listDocuments() method: Reading the parameter description allready hints that the documents get read. https://firebase.google.com/docs/firestore/reference/rest/v1/projects.databases.documents/listDocuments

The return value: It stands out that you'll get an array of documents, not of their references. https://firebase.google.com/docs/firestore/reference/rest/v1/ListDocumentsResponse

Related