如何获得"关系"数据存储上有效的元素?

时间:2015-04-04 19:18:32

标签: google-app-engine google-cloud-datastore

我正在使用Google数据存储开发社交登录系统。我需要使用其社交身份对用户进行身份验证,然后返回其所有身份的信息。客户端可以使用多个社交帐户登录,也可以使用在我的网站上创建的身份登录,因此它基本上具有多个社交身份以及我的网站身份。目前我正在使用运行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

1 个答案:

答案 0 :(得分:1)

  1. 您可以通过其密钥获取userData,这比运行查询更快,更便宜。为了能够这样做,您应该使用userId作为userData的id。

  2. 您的第三个查询可能只在极少数情况下才需要,例如:当用户访问帐户设置时。在任何一种情况下,我都不会过多担心这些查询:它们会检索少量实体,这意味着它们的执行速度非常快。

  3. 您可以在会话中存储一些数据,因此您无需在下一个会话之前将其检索到。我存储了一个LoginOption实体,它相当于你的userId和socialId。因此,我可以绕过第一个查询,直到用户注销或会话过期。