Google Cloud Datastore, одновременное чтение / запись, возможны конфликты? - PullRequest
0 голосов
/ 06 августа 2020

Сценарий: я запускаю множество рабочих (виртуальных машин Compute Engine), и все они запрашивают один и тот же тип хранилища данных со статусом «открыто». Они запрашивают ограничение, скажем, 10 КБ. Затем рабочие обновляют статус до «запущен» через put_multi (python).

Могут ли возникать конфликты чтения / записи при одновременном доступе к Entites?

1 Ответ

1 голос
/ 06 августа 2020

Google Cloud Datastore имеет некоторые ограничения по использованию, например, Datastore может обрабатывать множество операций, но вам нужно следовать правилу 500/50/5, как указано в документе о лучших практиках Datastore .

Это правило гласит:

Мы рекомендуем максимум 500 операций в секунду для нового типа, а затем увеличиваем трафик c на 50% каждые 5 минут. Теоретически вы можете увеличить количество операций до 740 тыс. Операций в секунду за 90 минут, используя этот график увеличения. Убедитесь, что записи распределяются относительно равномерно по всему диапазону ключей.

Также упоминается документ о передовых методах:

Если вы обновляете объект слишком быстро, ваш режим хранилища данных пишет будут иметь большую задержку, таймауты и другие типы ошибок. Это известно как конфликт.

По моему опыту, эффект contention возникает, когда объект изменяется более одного раза в секунду, я рекомендую изменять один и тот же объект один раз в секунду (напишите операция)

Если следовать этим правилам, чтение и запись одновременно не будет проблемой для производительности.

Что касается согласованности данных, имейте в виду, что операции чтения и записи запускаются одновременно войдет в состояние гонки, что может привести к неожиданным результатам.

Как упоминается в документе транзакций , вы можете использовать их для задержки второй транзакции, избегая состояния гонки из-за транзакции функция блокировки

В этом документе приведены некоторые примеры кода, касающиеся согласованности данных при использовании транзакций.

...