我正在构建一个通知系统,并且正在使用Google Cloud Firestore存储通知消息。这个想法是要有一个如下的模式。具有代表“用户”角色的文档的集合通知,具有该用户ID的嵌套集合,并且在ID的文档内部,具有针对该用户的通知的集合,例如:notification-> customer-> 88具有以下集合:对于客户88的消息,消息ID是由Firestore随机创建的。
在某些情况下,我会将消息发送给800个用户,所以我在bach上执行500(BATCH_LIMIT),这是在请求中写入Firestore的限制。为此,我正在使用此代码。
def self.save(entities, message)
entities.each_slice(BATCH_LIMIT) do |entities_chunk|
firestore.batch do |batch|
entities_chunk.each do |entity|
collection_reference = firestore.col(BASE_COLLECTION).doc(entity.account_type).col(entity.account_id).doc
batch.set(collection_reference, message)
end
end
end
end
此操作最多需要180秒才能完成(800次写入aprox)在Google Cloud Firestore中。这正常吗?这不会扩展。还有另一种方法吗?