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