Актуализиране на данни на мобилни устройства чрез App Engine (за предпочитане избягване на горещи таблети)

Малко основна информация за контекст: Създавам приложение (iOS + android) с около шест вида основни обекти (потребител, вид, събитие, етикет, изображение и доверие). Потребителите могат да създават нови потребители и след това да споделят този нов потребител с други потребители (напр. родител може да създаде дете и да покани друг потребител да действа върху това дете).

За всеки потребител човек може (с достатъчно права, представени от обекти на Trust) да добавя нови събития, съдържащи нула или повече тагове и нула или повече изображения. Всяко събитие също е част от "клас" (то е от определен "вид", представен от Kind обекти).

Събитията имат клеймо за време (java.util.Date), така че могат да се показват на потребителя в хронологичен ред и всички обекти съдържат "модифицирано" клеймо за време.

Използвам Java на машината за приложения, но смятам, че този въпрос е от общ характер. Освен това никакви обекти не са вградени в други, а само ключове (т.е. обект на събитие има списък с ключове за изображения, а не обекти за изображения).

Сега предизвикателството е следното: Как мога по ефективен начин да проверя хранилището за данни за актуализации за всички тези типове? Моето наивно внедряване на прототип прави следното: На мобилното устройство, в момента анкетирам сървъра от време на време (в момента на всеки пет минути или всеки път, когато потребителят изпрати актуализация на сървъра), проверявам списък с доверие, за да намеря потребителите, които анкетиращият може да види, и за всеки тип (Потребител, Вид, Събитие, Етикет, Изображение, Доверие) попитайте хранилището за данни за обекти, свързани с този потребител, които имат модифицирана дата, по-нова от последната анкета. Това очевидно е твърде много обаждания към хранилището за данни.

Ако хранилището за данни на машината за приложения има проблема с „горещите таблети“ (вж. http://ikaisays.com/2011/01/25/app-engine-datastore-tip-monotonically-increasing-values-are-лошо/), как мога ефективно да поиска от сървъра актуализации от последната ми проверка? Добавянето на клеймо за време очевидно причинява затруднение. И все пак искам да актуализирам мобилния клиент с промени, направени от последното запитване. (Знам, че това пречка е малко вероятно да ме засегне в този проект, но имам друг проект през март, където това може да се превърне в истински проблем.)

За да обобщим, въпросът е: Какви са най-добрите практики за актуализиране на мобилни клиенти с нови/модифицирани данни с помощта на машина за приложения?

Благодаря ви, че прочетохте моята стена с текст, надявам се, че успях да предам въпроса и неговия контекст по донякъде разбираем начин.

Ex animo,
- Александър.


person yngling    schedule 03.12.2011    source източник
comment
Тук наистина не е нужно да се притеснявате за горещи таблетки. За да бъдат табличките, съдържащи индексните редове с клеймото за време, „горещи“, ще трябва да пишете хиляди – вероятно десетки хиляди – редове в секунда за продължителен период.   -  person Nick Johnson    schedule 06.12.2011


Отговори (1)


(Първоначално това беше част от въпроса, но го редактирах, тъй като наистина е опит да се отговори на част от него.)

Вярвам, че мога да използвам курсори на заявки (вж. http://code.google.com/appengine/docs/java/datastore/queries.html ), за да направите нещата малко по-ефективни. Той трябва да поддържа препратка към местоположението в индекса, което вече е достигнато (индексът се сортира по модифицираното времево клеймо), така че да може да започне търсенето в тази точка. Цената е да съхранявате и предавате този курсор на устройство. Коментари за това също са добре дошли (свързано е с основния въпрос как да се актуализират ефективно клиентите).

person yngling    schedule 03.12.2011