Python 2.7 盖伊:什么';这是构建模型数据存储的最佳实践
因此,在过去的3年中,我一直在使用关系数据库,我在创建noSql数据库的思维方式上遇到了一些问题。我有以下型号:Python 2.7 盖伊:什么';这是构建模型数据存储的最佳实践,python-2.7,google-app-engine,data-structures,nosql,google-cloud-datastore,Python 2.7,Google App Engine,Data Structures,Nosql,Google Cloud Datastore,因此,在过去的3年中,我一直在使用关系数据库,我在创建noSql数据库的思维方式上遇到了一些问题。我有以下型号: class Account(ndb.Model): first_name = ndb.StringProperty() last_name = ndb.StringProperty() email = ndb.StringProperty() password = ndb.StringProperty() class Organisation(nd
class Account(ndb.Model):
first_name = ndb.StringProperty()
last_name = ndb.StringProperty()
email = ndb.StringProperty()
password = ndb.StringProperty()
class Organisation(ndb.Model):
org_name = ndb.StringProperty()
org_address = ndb.StringProperty()
.. and so on
class UserProfile(ndb.Model):
user = ndb.KeyProperty(kind='Account')
organisation = ndb.KeyProperty(kind='Organisation')
role = ndb.StringProperty()
Account x组织在技术上是一种多对多关系,因此UserProfile就像关系数据库中的链接表一样
根据我的理解,我不应该为了获取实体的信息而进行超过1次的查询。例如,如果我通过查询获取属于该用户的所有UserProfiles,那么我就不必通过循环查询每个UserProfiles实体来分别获取关于每个组织的信息。我觉得我的组织方式不是最好的,也不是应该的
我考虑的另一件事是将组织详细信息存储在帐户模型本身中,但是如果组织详细信息发生了变化,那么我将不得不查询与该组织相关的所有帐户,并分别更新每个帐户
对于如何做到这一点,我通常感到困惑,任何帮助或解释我的错误之处都将不胜感激
为了获取实体的信息,我不需要进行超过1次的查询
好吧,在您的示例中,您不是-额外的查找(不是查询)将用于收集有关组织的信息,这些组织与您查询的用户配置文件实体不同
但是你有两个基本的(和相反的)想法:
- 在建模1对多和多对多关系时,使用
引用其他实体:最小/无重复信息,因此不需要同步/维护,但需要多个查询/查找来聚合跨多个实体的信息ndb.KeyProperty
- 将所需信息克隆到各个实体内部(可能使用?)-允许更快的访问(无需额外的查询/查找来获取信息),但在需要更新克隆信息时需要同步/维护
就我个人而言,如果可能的话,我倾向于选择第一种。当我面对需要多个查询/查找的情况时,我总是反复检查是否真的需要同时使用来自多个实体的信息(例如,在单独的屏幕上显示组织详细信息可能是可以接受的?)。但这只是个人偏好。谷歌将把每个数据存储用户迁移到NoSQL Cloud Firestore(数据存储模式)。但您也可以使用原生云Firestore,它有许多好处。更多:感谢您的见解