2011-09-04 59 views
1

我有一個「計算」實體數據存儲區有說,該實體在7個億個對象。它具有以下特性(Python運行):使用GAE數據存儲的作業管理

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並沒有真正的經驗,查詢內容很混亂。如果我想盡可能節省服務器CPU,那麼最佳解決方案是什麼?

謝謝!

回答

1

我不知道我是否真的明白了。但你只需要返回你的第一個Ajax調用實體計算的關鍵和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() 
+0

感謝,正是我尋找。但是我相信QRY應該QRY = Calculation.all()過濾器(「答案=」,「無」) – ejang

+0

@ejang不,它不應該是 - 將匹配具有字符串值「無」的答案,不是「無」的答案。 –

+0

嗯,很奇怪。它似乎是數據存儲中的'None'字符串,但它可能是required = True或導致'None'被置於空屬性中的東西。 – ejang