2015-04-04 25 views
0

我正在開發一個使用谷歌數據存儲的社交登錄系統。我需要使用其社會身份認證用戶,然後返回所有身份信息。客戶可以登錄多個社交帳戶,也可以在我的網站上創建一個身份,因此它基本上具有多個社交身份和我的網站身份。目前我使用運行3個查詢(按順序),我覺得這是一個有點太多了,所以我不知道是否有更好的方法來做到這一點:如何在數據存儲上高效地獲得「關係」元素?

// get the username registered with my site(if is registered) 
    - userID = SELECT userID From social WHERE socialID == $socialID 
// get the data of the user 
    - userData = SELECT * from MyData WHERE userID == userID 
// get the data of any other identity it uses/has linked to the user id 
    - otherSocial = select * FROM social WHERE userID=userID and socialID != $socialID 
+0

這似乎是一個祖先查詢的工作。如果你的「MyData」是所有「社交」的祖先,那麼你可以在一個查詢中獲得所有內容,不是嗎? – Patrice 2015-04-04 19:19:46

+0

我如何通過社交身份獲得MyData?(即Sibling的祖先) – 2015-04-04 19:24:59

+0

https://cloud.google.com/appengine/docs/python/datastore/modelclass#Model_parent。所以從你的社交中,你可以做MyData = social.parent(),然後從那裏開始工作。或者使用安德烈的建議,這也可以工作 – Patrice 2015-04-04 19:33:50

回答

1
  1. 您可以通過獲取其用戶數據鍵,它比運行查詢更快,更便宜。爲了能夠做到這一點,你應該使用userId作爲userData的id。

  2. 您的第三個查詢可能僅在極少數情況下才需要,例如,當用戶訪問帳戶設置時。無論哪種情況,我都不會太擔心這些查詢:它們檢索少量實體,這意味着它們執行得非常快。

  3. 您可以在會話中存儲一些數據,因此您不必在下一個會話之前檢索它。我存儲了一個LoginOption實體,它與您的userId和socialId等效。因此,我可以繞過第一個查詢,直到用戶註銷或會話過期。

相關問題