我有两个班级:
class User(ndb.Model): # key is user's email
phone = ndb.IntegerProperty(indexed=False)
...
class Question(ndb.Model):
user = ndb.KeyProperty(kind=User)
...
使用以下代码将用户的问题添加到数据存储区:
q = Question()
...
user = User.get_by_id(email)
if user:
q.user = ndb.Key(User, email)
(未知用户可以添加问题)
我做得对吗?我应该以某种方式优化代码(使用keys_only
?)来减少读/写NDB操作的数量?
答案 0 :(得分:0)
用户是否已登录?如果是,那么您可以将userkey存储在会话中并省略get_by_id。
除此之外,get_by_id非常有效,但是如果用户实体很大,你应该考虑拆分它(因为获取更小的实体更便宜)。关于get_by_id的另一个很酷的事情是它首先使用memcache,然后是数据存储区,如果实体不在memcache中。如果用户提出了很多问题,那么实体可能会在memcache中。