Какъв е моделът за проследяване на текущите потребители в google app engine?

Всеки от моите потребители проверява сървъра на всеки няколко секунди. Трябва да поддържам под ръка списък с потребителите, които са анкетирали през последните 30 секунди за задача, която съм поставил на опашка за изпълнение на всеки няколко секунди.

Очевидният начин, който виждам да го направя, е да актуализирам запис в хранилището за данни всеки път, когато потребителят анкетира, и да отправя запитвания към записите, които имат времеви печат в рамките на последните N секунди в моята опашка със задачи. Не мога да си го представя добре това мащабиране.

Някакви препоръки?

Благодаря.


person shino    schedule 23.06.2010    source източник
comment
Просто се уверете, че сте поставили индекс на клеймото за време   -  person Romain Hippeau    schedule 23.06.2010


Отговори (2)


Сравних записите за малки обекти на около 1/20 от секундата всеки. Ако базирате ключа на вашите анкетни обекти на уникална стойност, свързана с потребител, тогава можете да получите достъп до анкетните обекти по ключ, когато ги актуализирате, което е много бързо хеширане вместо търсене.

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

Можете да направите заявка за всички обекти на анкета, които са били актуализирани през последните 30 секунди, това е четене и трябва да бъде бързо.

person Chris Dutrow    schedule 23.06.2010
comment
Нещото, за което се притеснявам, е последната заявка за създаване на моя списък с текущи потребители. Ако имам 1000 анкетиращи потребители, това означава, че трябва да извлека 1000 обекта. Или искаш да кажеш, че заявката ще бъде бърза, ако присвоя ключ на всеки потребител? Благодаря. - person shino; 24.06.2010
comment
Мисля, че това запитване всъщност ще бъде бавно. Вероятно дори ще трябва да го разделите в няколко различни заявки. Трябва ли да се върне веднага? Ако изпълнявате задачата на всеки няколко секунди, чудя се дали можете просто да анкетирате потребителите, които са анкетирали от последния път, когато сте направили заявката? Друг вариант би бил да използвате може би 50 обекта, всеки от които притежава списък с наскоро анкетирани потребители. Бихте могли да използвате ключа на потребителя, за да формирате хеш, който ще определи кой обект да се актуализира, когато те анкетират. - person Chris Dutrow; 27.06.2010

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

person Nick Johnson    schedule 23.06.2010