2012-01-05 2 views
0

Пробираясь через документы GAE.GAE datastore contention avoidance?

У меня есть вопрос, на который я не могу найти очевидного ответа. Учитывая, что транзакция для группы сущностей ограничена 1/сек, как вы можете масштабировать запрос, где говорят, что 10 000 пользователей все хотят получить доступ к определенной странице пользователя одновременно?

Разве это не даст вам 10 000 чтений в группе лиц конкретного пользователя в 1/сек, что приведет к катастрофическим сбоям системы и несчастным пользователям?

Или я смущен, и только записи становятся спорными.

ответ

5

AppEngine использует для транзакций a optimistic concurrency control, что означает, что они не блокируют данные, но генерируют исключение, когда они обнаруживают, что данные «грязные». Итак, первая транзакция для изменения данных одобрена, вторая получает исключение и должна повторить попытку.

Учитывая это, я полагаю, что чтения не блокируются, если они не являются частью транзакции, даже если выполняется какая-либо другая транзакция.

Кроме того, чтобы сделать транзакции менее узкими, следует тщательно организовать группы сущностей и сделать их как можно более малыми, а также организовать их таким образом, чтобы было возможно как можно меньше конфликтов (параллельных запросов). Значение:

  1. Имеют небольшие диаграммы сущностей - не помещайте много объектов под общим родителем.
  2. Попробуйте создать пользовательский объект в качестве родительского корня. Обычно пользователи не создают параллельные транзакции (например, делают несколько денежных переводов в одно и то же время и т. Д.)
+1

Ваше предположение верно - ограничение скорости обновления распространяется только на обновления, а не на чтение. –

+0

Спасибо Петру за тщательное консультирование –

0

Право. Я не думал. Ответ - memcache. По крайней мере, частично. Это и эффективная модель данных/схема.

+0

Нет, решение состоит в том, что нет проблем - ограничение скорости распространяется только на записи, а не на чтение. Тем не менее, все же очень хорошая идея использовать memcache. –

+0

Отлично. Спасибо @Google –