използване на хранилище за данни на GAE за управление на задания

Имам обект „Изчисление“ в моето хранилище за данни с да речем 7 милиона обекта под този обект. Той има следните свойства (време за изпълнение на python):

class Calculation(db.Model):
    question = db.StringProperty(required=True)
    answer = db.StringProperty()

да предположим, че примери за свойството „въпрос“ са неща като „1+1“, „2+2“, „3+3“ (не е много важно). Всички изчислителни обекти започват с празни свойства на отговора.

Когато потребител се свърже с приложението, се прави ajax повикване и моето приложение трябва [1] да извлече обект за изчисление с празно свойство за отговор и да го изпрати до браузъра на потребителя. След това браузърът на потребителя оценява въпроса и го изпраща обратно на друг манипулатор на сървъра.

Как да актуализирам свойството отговор[2] на този конкретен обект за изчисление?

Ако някой може да ми предостави код за [1] и [2], това би било чудесно. Нямам много опит с App Engine и нещата със заявките са объркващи. Кое е най-доброто решение за това, ако искам да запазя възможно най-много сървърен процесор?

Благодаря!


person ejang    schedule 04.09.2011    source източник


Отговори (1)


Не знам дали наистина разбрах. Но просто трябва да върнете за първото си ajax извикване ключа на обекта Calculation и question. Когато потребителят даде отговор, вие първо получавате обекта чрез ключа и актуализирате свойството answer.

Стъпка 1, Ajax извикването връща въпрос в JSON (например):

# To fetch an empty answered question
qry = Calculation.All().filter('answer =', None)
ref = qry.get()

# The Json response
{ 'key': unicode(ref.key()),
  'question': ref.question}

Стъпка 2, Вие актуализирате обекта чрез ключа:

# key and answer are variable from an http GET or POST request.
ref = db.get(key)
ref.answer = answer
ref.put()
person sahid    schedule 04.09.2011
comment
благодаря, точно това, което търсих. въпреки това вярвам, че qry трябва да бъде qry = Calculation.all().filter('answer =','None') - person ejang; 04.09.2011
comment
@ejang Не, не трябва да бъде - това ще съответства на отговори, които имат низова стойност None, а не отговори, които са None. - person Nick Johnson; 05.09.2011
comment
хм, странно. изглежда, че е низ „Няма“ в хранилището за данни, но може да е required=True или нещо, което кара „Няма“ да бъде поставено в празните свойства. - person ejang; 05.09.2011