У меня есть 3 части этого вопроса:
У меня есть приложение, в котором пользователи создают объекты, которые другие пользователи могут обновлять в течение 5 минут. Через 5 минут время ожидания объектов истекает, и они становятся недействительными. Я храню объекты как объекты. Чтобы сделать тайм-аут, у меня есть задание cron, которое запускается раз в минуту, чтобы очистить просроченные объекты.
Большую часть времени сейчас у меня нет активных объектов. В этом случае обработчик mapreduce проверяет полученную сущность и ничего не делает, если она не активна, не записывает. Однако моя бесплатная квота на запись в хранилище данных заканчивается из-за вызовов mapreduce примерно через 7 часов. По моим приблизительным оценкам, просто запуск mapreduce вызывает около 120 операций записи/вызова. (Грубая математика, 60 вызовов/час * 7 часов = 420 вызовов, лимит 50 тыс. операций/420 вызовов ~ 120 операций записи/вызов)
Вопрос 1. Кто-нибудь может проверить, что один лишь запуск триггеров mapreduce вызывает около 120 операций записи в хранилище данных?
Чтобы обойти это, я проверяю хранилище данных перед запуском mapreduce:
def cronhandler():
count = model.all(keys_only=True).count(limit=1000)
if count:
shards = (count / 100) + 1;
from mapreduce import control
control.start_map("Timeout open objects",
"expire.maphandler",
"expire.OpenOrderInputReader",
{'entity_kind' : 'model'},
shard_count=shards)
return HttpResponse()
Вопрос 2. Является ли это лучшим способом избежать операций записи в хранилище данных, вызванных mapreduce? Есть ли лучший способ настроить mapreduce, чтобы избежать посторонних записей? Я думал, что потенциально это возможно с лучшим пользовательским InputReader
Вопрос 3. Я предполагаю, что увеличение количества сегментов приводит к увеличению числа посторонних операций записи в хранилище данных из бухгалтерии mapreduce. Является ли ограничение осколков ожидаемым количеством объектов, которое мне нужно написать, надлежащим образом?