Я создаю систему уведомлений и использую Google Cloud Firestore для хранения уведомлений. Идея заключалась в том, чтобы иметь следующую схему. Коллекция уведомлений с документами, представляющими роль «пользователя» во вложенной коллекции с идентификаторами этих пользователей, а внутри документа идентификатора - коллекция с уведомлениями для этих пользователей, например: Notification-> customer-> 88 имеет коллекцию сообщения для клиента 88, идентификаторы сообщений случайным образом создаются 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 записей приблизительно) в Google Cloud Firestore. Это нормально ? Это не масштабируется. Есть еще один способ сделать это?