应用程序引擎(python)建模关系,我做错了吗?
使用下面的模型,我试图找到一种生成各种新闻提要的方法,这样当用户登录时,他们会看到一个即将发生的事件列表,这些事件是他们选择关注的。我是否能够查询类似“从UserprofileInstance.following中的Barevent WHERE parent_栏中选择*”之类的内容?如果是这样,这是否有效应用程序引擎(python)建模关系,我做错了吗?,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,使用下面的模型,我试图找到一种生成各种新闻提要的方法,这样当用户登录时,他们会看到一个即将发生的事件列表,这些事件是他们选择关注的。我是否能够查询类似“从UserprofileInstance.following中的Barevent WHERE parent_栏中选择*”之类的内容?如果是这样,这是否有效 class Barprofile(db.Model): b_user = db.UserProperty() created = db.Dat
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)
有很多方法可以进行GAE查询,但我不明白为什么你的方法不起作用。 如果您有一个特定的Barprofile(B),那么我认为您可以(在Python中)这样做 但是我不太清楚为什么你有一个Userprofile和一个Barprofile(所以我想你应该重新考虑这三个)
一般来说,您不需要(甚至不想)像在传统RDBMS环境中那样在GAE中规范化数据。用这种方式规范化数据已经没有什么特别的好处了,也就是说,您现在可以在应用程序级别进行规范化,而不是将其添加到数据库中以确保一致性。您的模型和查询应该可以正常工作,而且不会低效。您需要记住的一件事是,如果删除了Barprofile实体,您可能需要手动从每个Userprofile的以下属性中删除它们的键。具有孤立的Barprofile引用不会中断查询,但是如果您将该列表用于其他目的(例如向用户显示他或她订阅的酒吧),如果您尝试查询该键,则会出现错误。您描述的结构将起作用,但请记住,“in”操作符需要对列表中的每个项执行一个查询,因此可能会导致大量查询
然而,你要处理的是一个类似于推特的“分散-聚集”问题,所以你没有太多选择-你要么在阅读时收集信息,要么在更新时向所有收听的用户广播。谢谢亚当。我只是需要确认一下我是否走上了正确的道路。谢谢你的确认,尼克,我担心这会产生很多疑问。我得绞尽脑汁,看看能不能找到一种有效的方法来缓存其中的一些。
query = db.GqlQuery("SELECT * FROM Barevent WHERE parent_bar = :1,
B.b_user)
day = query.get()