Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌应用引擎数据存储建模_Java_Google App Engine_Nosql_Google Cloud Datastore - Fatal编程技术网

Java 谷歌应用引擎数据存储建模

Java 谷歌应用引擎数据存储建模,java,google-app-engine,nosql,google-cloud-datastore,Java,Google App Engine,Nosql,Google Cloud Datastore,关于如何为Google应用程序引擎数据存储建模的一般问题。我对实体组部分感到困惑。让我们以Facebook为例,其中有3个实体:用户、帖子和评论 现在我将如何实现它就像传统的RDBMS一样。每个帖子都有一个userId属性,每个评论都有一个postId属性和userId属性,我可以通过查询相互链接。我不使用任何实体组。但是,我觉得这将是实体组的一个好地方,因为帖子离不开用户,评论离不开帖子。我会把帖子设置成用户的孩子吗?评论是帖子和用户的后代 再一次,为了澄清,我对何时使用实体组感到困惑 **更

关于如何为Google应用程序引擎数据存储建模的一般问题。我对实体组部分感到困惑。让我们以Facebook为例,其中有3个实体:用户、帖子和评论

现在我将如何实现它就像传统的RDBMS一样。每个帖子都有一个userId属性,每个评论都有一个postId属性和userId属性,我可以通过查询相互链接。我不使用任何实体组。但是,我觉得这将是实体组的一个好地方,因为帖子离不开用户,评论离不开帖子。我会把帖子设置成用户的孩子吗?评论是帖子和用户的后代

再一次,为了澄清,我对何时使用实体组感到困惑


**更新:我在使用Java

我猜你在使用python? 如果您使用应该使用的NDB,则可以将“外来id”或密钥存储为密钥属性列表

message = ndb.KeyProperty(kind=Message, repeated=True) 
但请仔细阅读选项,因为选项很多;)


您应该知道,在高复制数据存储上,实体组具有每秒1次写入的软限制。在创建建模选择时请记住这一点

使用实体组的一个很好的理由是用于一致的查询或以事务方式更新多个模型。如果需要使用事务更新1个或多个模型,它们必须属于同一实体组(尽管现在有跨组事务,一次最多支持5个不同的组)。如果要执行强一致性查询(并非默认情况下的最终一致性查询),则需要在查询中指定父级。了解有关强一致性的更多信息

您可以阅读有关实体组用法的信息

您可以按照所述对关系进行建模,但也可以使用或从一个模型引用到另一个模型

JAVA更新 我上面所说的实体组对于JAVA和python都是正确的,只是您将使用它在模型之间引用对象

同样,对于JAVA/Python,我相信单个实体组中的所有实体都可以更快地检索,因为数据保存在单个节点上(对于M/S数据存储来说是如此,但对于HRD则不确定)。发件人:

实体组关系告诉应用程序引擎存储多个实体 在分布式网络的同一部分


如果您知道必须是相对较小(大小有界)的集合,则重复属性是可以的。请记住,实体的大小限制为1Mb。因此,它们往往不具有规模。实体组确实使使用祖先查询查询所有子级变得容易。但是,如果实体组中有大量并发写入,则写入冲突的可能性会增加。所以这些都是影响设计的因素,我想我应该删除我的答案?这仍然是相关的,OP需要了解不同的方法。他以facebook为例;-)根据我的研究,我认为这不是一个好答案。实体组似乎对于保持一致性以及降低访问数据的成本至关重要。因此,可以肯定地说,我建议的不使用实体组的方式是可行的??是的,但不需要显式地设置id字段,您可以使用与每个实体相关联的键是的,我可以使用ID字段,但是为了将评论链接到帖子,我仍然需要在评论实体(与帖子实体相关联的键)中显式声明postId字段。你同意吗?我的意思是,数据存储中的每个实体都会自动分配一个密钥。我认为这在python中与在JAVA中是不同的,这取决于JDO和JPA的区别,等等。。这个链接展示了如何使用JDO建模,在JDO中,您为对象提供了一个键字段,但它看起来会自动生成。