Некоторая справочная информация для контекста: я создаю приложение (iOS + android) с примерно шестью видами основных объектов (Пользователь, Вид, Событие, Тег, Изображение и Доверие). Пользователи могут создавать новых пользователей, а затем делиться этим новым пользователем с другими пользователями (например, родитель может создать дочернего элемента и пригласить другого пользователя воздействовать на этого дочернего элемента).
Для каждого пользователя можно (при наличии достаточных прав, представленных объектами доверия) добавлять новые события, содержащие ноль или более тегов и ноль или более изображений. Каждое событие также является частью "класса" (оно имеет определенный "вид", представленный объектами вида).
События имеют метку времени (java.util.Date), поэтому они могут отображаться пользователю в хронологическом порядке, а все объекты содержат «измененную» метку времени.
Я использую Java на движке приложения, но считаю, что этот вопрос носит общий характер. Кроме того, в другие объекты не внедряются никакие объекты, только ключи (т. Е. Объект Event имеет список ключей Image, а не объектов Image).
Теперь проблема заключается в следующем: как эффективно проверить хранилище данных на наличие обновлений для всех этих типов? Моя наивная реализация прототипа делает это: на мобильном устройстве я в настоящее время опрашиваю сервер очень часто (в настоящее время каждые пять минут или всякий раз, когда пользователь отправляет обновление на сервер), проверяет список доверительных отношений, чтобы найти пользователей, которых может видеть опросник, и для каждого типа (Пользователь, Вид, Событие, Тэг, Изображение, Доверие) запросите в хранилище данных объекты, связанные с этим пользователем, у которых дата изменения была более поздняя, чем при последнем опросе. Это явно слишком много звонков в хранилище данных.
Если в хранилище данных ядра приложения возникла проблема «горячих планшетов» (см. http://ikaisays.com/2011/01/25/app-engine-datastore-tip-monotonically-increasing-values-are-bad/), как я могу эффективно запрашивать обновления на сервере с момента последней проверки? Добавление временной метки вызывает узкое место, по-видимому. И все же я хочу обновить мобильный клиент с изменениями, внесенными с момента его последнего запроса. (Я знаю, что это узкое место вряд ли повлияет на меня в этом проекте, но у меня есть другой проект в марте, где это может стать реальной проблемой.)
Подводя итог, можно задать вопрос: каковы наилучшие практики для обновления мобильных клиентов новыми / измененными данными с помощью механизма приложений?
Спасибо, что прочитали мою стену текста, надеюсь, мне удалось донести вопрос и его контекст в несколько понятной форме.
Ex animo,
- Александр.