对于像这样的模型:
class Thing(ndb.Model):
visible = ndb.BooleanProperty()
made_by = ndb.KeyProperty(kind=User)
belongs_to = ndb.KeyProperty(kind=AnotherThing)
本质上执行“或”查询,但比较不同的属性,所以我不能使用内置的 OR... 我想获取所有Thing
(属于特定的AnotherThing
)已经visible
设置为True
或visible
现在是当前用户的用户False
。made_by
这对数据存储的要求会更低(即财务成本更低):
查询以获取所有内容,即:
Thing.query(Thing.belongs_to == some_thing.key)
并遍历结果,存储可见的以及不可见但由当前用户制作的结果?查询以获取可见的,即:
Thing.query(Thing.belongs_to == some_thing.key, Thing.visible == "True")
并单独查询以获取当前用户不可见的,即:Thing.query(Thing.belongs_to == some_thing.key, Thing.visible == "False", Thing.made_by = current_user)
?
数字 1. 会得到许多不需要的结果,例如Thing
其他用户的不可见 s - 我认为这是对数据存储的多次读取?2.虽然是两个完整的查询,这也可能是不必要的繁重,对吧?我仍在尝试找出与数据库的何种交互会导致何种成本。
我在必要时使用 ndb、tasklet 和 memcache,以防万一。