Хранилище данных GAE: «общее» свойство или добавление позиций?

Это еще один вопрос о хранилище данных Google App Engine.

Допустим, мое приложение отслеживает группу крыс и количество съеденного ими сыра. Каждая сущность Rat имеет ряд сущностей Meal, каждая из которых отслеживает, когда крыса съела и сколько кусочков сыра (свойство slices). Каждый Rat также имеет свойство total_slices, которое обновляется всякий раз, когда регистрируется новый прием пищи.

Должен ли я отказаться от свойства total_slices в пользу простого сложения slices каждого Meal всякий раз, когда мне нужно узнать сумму? В документации хранилища данных говорится, что запросы дешевы, а обновление объекта с высокой частотой проблематично (Google определяет «высокую частоту» как обновление объекта более одного раза в секунду с постоянной скоростью). Поэтому, если у меня есть действительно прожорливые крысы, которые пируют чаще, чем раз в секунду, я рискую получить тайм-аут, когда обновлю total_slices Rat.

Любые предложения, как лучше всего разработать этот сценарий?


person Tony the Pony    schedule 10.11.2010    source источник


Ответы (1)


В вашем вопросе есть две отдельные проблемы:

<сильный>1. Должны ли вы денормализовать total_slices в сущность Rat?

Чтобы ответить на этот вопрос, вы должны проанализировать шаблоны доступа к данным вашего приложения. Например:

  • Является ли получение total_slices за Rat обычной задачей?
  • Вам когда-нибудь понадобится перечислять или сортировать Rats по total_slices?
  • Будет ли суммирование каждого Meal по-прежнему эффективным после накопления данных за несколько лет?

<сильный>2. Что делать в GAE, если у вас есть объект, который нужно обновлять чаще, чем 1 раз в секунду?

Используйте разделенный счетчик.

person cope360    schedule 10.11.2010