使用以下模型,我试图找出一种方法来生成各种类型的新闻提要,这样当用户登录时,他们将看到一个他们选择关注的酒吧即将发生的事件的列表。我可以查询类似“SELECT*FROM Barevent WHERE parent_bar IN”的内容吗UserprofileInstance.following”? 如果是这样的话,这会有效率吗?在
class Barprofile(db.Model):
b_user = db.UserProperty()
created = db.DateTimeProperty(auto_now_add=True)
barname = db.StringProperty()
address = db.PostalAddressProperty()
zipcode = db.StringProperty()
class Barevent(db.Model):
created = db.DateTimeProperty(auto_now_add=True)
when = db.DateProperty()
starttime = db.TimeProperty()
endtime = db.TimeProperty()
description = db.StringProperty(multiline=True)
parent_bar = db.ReferenceProperty(Barprofile, collection_name='bar_events')
class Userprofile(db.Model):
b_user = db.UserProperty()
following = db.ListProperty(db.Key)
您的模型和查询应该可以正常工作,并且不会效率低下。您需要记住的一点是,如果Barprofile实体被删除,您可能需要从每个Userprofile的following属性中手动删除它们的键。有一个孤立的Barprofile引用不会中断查询,但是如果您将该列表用于其他目的(例如向用户显示他或她订阅了哪些条),那么如果您试图查询该键,则会出现错误。在
有很多方法可以进行GAE查询,但我不明白为什么你的方法不起作用。 如果您有一个特定的Barprofile(B),那么我认为您可以(在Python中)这样做
但我不太清楚为什么你同时有一个Userprofile和一个Barprofile(所以我想你应该重新考虑这三个)。在
一般来说,您不需要(甚至不想)在GAE中规范化数据,就像您习惯于在传统RDBMS环境中那样。以这种方式规范化您的数据已经没有什么特别的好处了,也就是说,您现在不需要在应用程序级别上对数据库进行调整以确保一致性。在
您所描述的结构可以工作,但是要记住'in'操作符需要对列表中的每个项执行一个查询,因此可能会导致大量查询。在
然而,你要处理的是一个类似Twitter的“分散-聚集”问题,所以你没有太多的选择——要么像这样在阅读时收集东西,要么在更新时将它们广播给所有收听的用户。在
相关问题 更多 >
编程相关推荐