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
Google app engine 在谷歌应用程序引擎上组织实体组进行写作_Google App Engine_Nosql_Google Cloud Datastore - Fatal编程技术网

Google app engine 在谷歌应用程序引擎上组织实体组进行写作

Google app engine 在谷歌应用程序引擎上组织实体组进行写作,google-app-engine,nosql,google-cloud-datastore,Google App Engine,Nosql,Google Cloud Datastore,我对Google App Engine高复制数据存储(HRD)上的“实体组”有点困惑。Google文档提到HRD只允许每个实体组每秒写入1次 这到底意味着什么?这是每个用户请求写一次还是每个实体写一次(我假设这是一个类似于“表”的概念) 例如,如果我有一个“User”实体和一个“Post”表。如果“Post”是“User”的祖先: 这是否意味着one“用户”每秒可以创建one“帖子” …还是说对“Post”实体的所有写入都被限制为每秒1次写入,而不管用户是谁?(即,无论提交帖子的用户是谁,系统一

我对Google App Engine高复制数据存储(HRD)上的“实体组”有点困惑。Google文档提到HRD只允许每个实体组每秒写入1次

这到底意味着什么?这是每个用户请求写一次还是每个实体写一次(我假设这是一个类似于“表”的概念)

例如,如果我有一个“User”实体和一个“Post”表。如果“Post”是“User”的祖先:

  • 这是否意味着one“用户”每秒可以创建one“帖子”
  • …还是说对“Post”实体的所有写入都被限制为每秒1次写入,而不管用户是谁?(即,无论提交帖子的用户是谁,系统一次只能保存1篇帖子)
  • …还是说单个“用户”实体不能同时创建多个“帖子”(即使创建了数千个其他用户的“帖子”实体)
  • 我有什么办法来缓解这种情况?同时创建“用户”和“发布”根实体是否合理?这是否允许我在每秒写入1次的限制之外创建多个“Post”实例?如果假设1000个用户同时创建“Post”条目,我想避免任何潜在的问题。

    “实体组”与“表”不同。
    appengine数据存储中没有“表”的意思。您应该只考虑实体和索引

    仅当您希望能够以事务方式执行操作时,才使用实体组。对于包含“Posts”的博客,事务性地添加或删除Posts可能无关紧要,因此它们不需要位于实体组中

    我的应用程序中有大约15种不同的实体,其中大约150万种。每一个都是一个根实体,甚至是相关的,我认为这是AppEngine的理想选择。据我所知,实体组的唯一用途是支持多个实体上的原子操作——它们不是组织工具


    PS:至于你关于实体组限制的问题(我认为现在对你来说这将是没有意义的):写入限制是每个实体,而不是每个请求。1.实体不创建其他实体。2.如果所有帖子都在同一个实体组中,那么是的,每秒只能保存1篇。3.如果每个用户都在自己的实体组中,那么您可以在同一时间在每个相同的组中写一篇文章,次数可以根据您的喜好而定。只是没有一个组每秒可以写入超过一次。是的,我认为“User”和“Post”都应该是根实体。

    使用实体组也可以使组内的数据高度一致

    例如,在没有实体组的情况下,如果创建一篇文章,然后快速导航到“最近发表的文章”列表,则可能无法立即看到新文章。对于博客来说,这可能不是问题

    但是如果你在做一个任务管理系统。。。您转到任务详细信息屏幕,关闭任务,这会将您导航回任务列表,任务仍可能显示为已打开。这是不能接受的。在这里,您需要实体组或其他方法来使任务列表与当前用户保持一致


    在某些数据模型中,创建实体组很容易。例如,假设您只能显示单个组的任务,则将任务作为项目组的一部分可以解决此问题。如果您的UI允许列出来自多个组的任务,则很难找到一个有效的模型。

    答案太棒了!非常感谢您的澄清。作为旁注(根据您的经验);与使用外部数据存储(如MongoDB或AWS DynamoDB)相比,您觉得HRD更受欢迎吗?不客气!我没有外部数据存储的经验。很难想象任何外部存储的延迟都不会压倒它们可能具有的任何其他性能优势。我可以想象功能的好处,不过…只是澄清一下,限制是对一个实体组的不同写入-但是您可以通过一个调用在组中写入多个实体。看看这个。你认为把用户和帖子放在同一个更高级别的实体中有什么好处或成本吗?