2010-08-31 47 views
2

在GAE的基於python的facebook應用程序中,我想檢查當前用戶的哪些朋友已經「標記」了網頁或不是。列表查詢,列表中的Facebook朋友?

爲此我必須運行儘可能多的數據庫查詢作爲朋友的數量(比如說100) 我擔心這可能會因爲大量的查詢而進入「超時」狀態。

Google DOC建議「列表」查詢並行運行,這會節省時間嗎? 另外列表有30的限制,所以我必須做2或3個列表類型的查詢。

請建議如果可能的話更好的方法,使用任務疑問句或東西....

+0

我不要求其正確和完整的遺憾,但我想查詢結果按用戶等級分類(1 - 5) – Tiwari 2010-08-31 19:59:10

回答

1

如果您已經知道他們的密鑰或密鑰名稱,則可以並行獲取多達1000個實體。

有幾種方法可以解決您的具體問題。這是一個。

我們假設當用戶「標記」一個網頁時,您將創建一個帶有從用戶的facebook標識和頁面關鍵字派生的key_name的實體。

class PageMarker(db.Model): 
    user = db.ReferenceProperty(AppUser) 
    .... 
    @classmethod 
    def mark_page(cls, user, page_key): 
     marker = cls.get_or_insert("%s_%s" % (user.facebook_id, 
              page_key, user=user) 

這可以讓你獲取所有誰標誌着平行頁面的用戶:

key_names = ["%s_%s" % (friend.facebook_id, page_key) for friend in friends] 
markers = db.get(key_names) 
# Use get_value_for_datastore to get the entity key without making a trip to the 
# datastore 
friends_who_bookmarked_keys = [marker.__class__.user.get_value_for_datastore(marker)\ 
          for marker in markers] 
friends = db.get(friends_who_bookmarked_keys) 
+0

很多感謝你的回覆,真的很有幫助,但我很抱歉沒有要求它正確和完整,但我希望根據用戶評分(1 - 5)排序查詢結果,我應該在Python代碼中排序結果還是嘗試將它從查詢中分類出來,成本更低 – Tiwari 2010-08-31 20:02:50

1

我建議如下:

  • 使「標記」誰標誌着用戶的實體子實體他們。
  • 對於基於網頁的URL的「標記」實體標記
  • 要找到誰標誌着一個頁面的朋友使用的按鍵名稱,檢索的朋友列表,然後生成從實體鍵的列表朋友列表(因爲您知道朋友關鍵字和URL,因此很容易),並且執行一次批量檢索來檢索指示哪些朋友已標記該頁面的「標記」實體列表。