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