Хранилище данных: многократные записи в группу объектов внутри транзакции превышают лимит записи?
Мне знакомо ограничение Datastore для одной записи в секунду (возможно, 5, возможно) для групп объектов. Как это соотносится с транзакциями?
Документы, кажется, указывают, что я могу сделать несколько изменений внутри транзакции, например, добавив несколько дочерних объектов:
Одна транзакция может изменить несколько объектов в одной группе или добавить новые объекты в группу, сделав родительский объект нового объекта существующим в группе.
https://cloud.google.com/appengine/docs/java/datastore/transactions
1 ответ
Да, вы можете выполнить несколько операций записи для одной группы объектов внутри одной транзакции, но с осторожностью:
- обратите внимание на отсутствие записей, вызывающих конфликты внутри одной и той же транзакции, в противном случае транзакция в конечном итоге завершится неудачей (даже после повторных попыток)
- старайтесь поддерживать количество записей внутри каждой транзакции на низком уровне или каким-то образом обеспечить достаточные интервалы между транзакциями, чтобы совокупная скорость операций записи (или, скорее, ее краткосрочная средняя величина) оставалась (значительно) ниже предела 1 записи / с - чтобы оставить место для мгновенные пики и случайные повторы при сбоях, которые также пережевывают этот предел. В противном случае вы получите исключения для параллелизма и конкуренции. См. Objectify - много записей в одну и ту же сущность за короткий промежуток времени с транзакцией и без нее
И, конечно, вы можете записать до 25 групп сущностей (в настоящее время) внутри транзакций между группами (каждая получает свой собственный предел ~1 записи / с для совокупности до ~25 операций записи / с).
Нахождение правильного баланса между возможной последовательностью и записью throuput не является тривиальным. Это может представлять интерес: какова цель объединения всех объектов хранилища данных в одну группу?
Обновить кредит на комментарий DanMcGrath:
Технически это 1 транзакция записи в секунду на группу сущностей, где транзакция может иметь до 500 сущностей для одной группы сущностей. Это означает, что вы можете записать не более 500 объектов в секунду в одну группу объектов. Также обратите внимание, что вы можете достигать пика выше раз в секунду, хотя, если вы поддерживаете его, вы повышаете риск возникновения конфликтов, а также возможную согласованность системы. - Дэн МакГрат 1 час назад