App Engine高复制数据存储区

如何解决App Engine高复制数据存储区

| 我是App Engine的新手,我想确认自己对高级复制数据存储的了解。 该文档说,实体组是“一致性单位”,并且所有数据最终都是一致的。同样,它也说“跨实体组的查询可能是陈旧的”。 有人可以提供一些查询“过时”的示例吗?是不是说我可以在没有任何父级(即它自己的组)的情况下保存实体,然后在不久后查询它却找不到它?是否还意味着如果我希望数据始终是100%最新的,就需要将它们全部保存在同一实体组中? 使用memcache缓存实体的时间是否比所有数据中心的数据保持一致所需的平均时间长,这是常见的解决方法?什么是延迟时间? 谢谢     

解决方法

           是说我可能会保存   没有任何父母的实体(即   自己的组),然后非常查询   不久之后又找不到了吗? 正确。从技术上讲,常规的Master-Slave数据存储区也是如此,因为索引是异步更新的,但是实际上,发生这种情况的时间窗口是如此之短,以至于您从未见过。 但是,如果通过“查询”来表示“通过键进行获取”,则在任何一种实现中都将始终返回高度一致的结果。   是否也暗示我要数据   始终保持100%最新,我需要   将它们全部保存在同一实体中   组? 您必须先定义“ 100%最新”的含义,然后才能回答。   这是常见的解决方法   使用memcache缓存实体   时间段长于平均水平   数据变为时间   所有数据中心都一致? 不会。内存缓存严格用于缩短访问时间;您不应该在逐出缓存会造成麻烦的任何情况下使用它。 如果需要确保您正在查看最新版本,则始终可以使用高度一致的获取。但是,如果没有具体示例说明您要执行的操作,则很难提供建议。     ,        强制性的博客示例设置;
Authors
Posts
class Author(db.Model):
    name = db.StringProperty()

class Post(db.Model):
    author = db.ReferenceProperty()
    article = db.TextProperty()

bob = Author(name=\'bob\')
bob.put()
首先要记住的是,对单个实体组(包括单个实体)的常规获取/删除/删除将按预期工作:
post1 = Post(article=\'first article\',author=bob)
post1.put()

fetched_post = Post.get(post1.key())
# fetched_post is latest post1
如果您开始跨多个实体组进行查询,您将只能注意到不稳定性。除非您指定“ 4”属性,否则所有实体都位于单独的实体组中。因此,如果紧接在“ 5”之后创建一个帖子,让他可以看到自己的帖子很重要,那么我们应该注意以下几点:
fetched_posts = Post.all().filter(\'author =\',bob).fetch(x)
# fetched_posts _might_ contain latest post1
fetched_posts
可能包含
bob
中最新的
post1
,但可能没有。这是因为所有的“ 1”都不在同一个实体组中。在HR中进行此类查询时,您应该想到“可能会给我获取bob的最新帖子”。 由于在我们的应用程序中,重要的是作者在创建后可以立即在列表中看到他的帖子,因此我们将使用
parent
属性将它们绑在一起,并使用
ancestor
查询仅从该组内获取帖子:
post2 = Post(parent=person,article=\'second article\',author=bob)
post2.put()

bobs_posts = Post.all().ancestor(bob.key()).filter(\'author =\',bob).fetch(x)
现在我们知道
post2
将出现在
bobs_posts
结果中。 如果查询的目的是获取“可能是所有最新帖子+绝对是bob的最新帖子”,我们将需要执行另一个查询。
other_posts = Post.all().fetch(x)
然后将结果
other_posts
bobs_posts
合并在一起,以获得所需的结果。     ,将我的应用程序从主/从服务器迁移到高复制数据存储区后,我不得不说,实际上,对于大多数应用程序而言,最终的一致性不是问题。 考虑经典的留言簿示例,其中您“ 19”一个新的留言簿帖子实体,然后立即查询该留言簿中的所有帖子。使用High Replication数据存储区,几秒钟后(在Google I / O上,Google工程师表示滞后时间约为2-5秒),您才会看到新帖子出现在查询结果中。 现在,实际上,您的留言簿应用程序可能正在对新的留言簿帖子条目进行AJAX帖子。提交新帖子后,无需重新获取所有帖子。一旦AJAX请求成功,webapp可以简单地将新条目插入UI。当用户离开网页返回并甚至点击浏览器刷新按钮时,将花费几秒钟的时间,并且很可能新查询将由拉回所有留言簿帖子的查询返回。 最后,请注意,最终的一致性性能仅适用于查询。如果您“ѭ19”一个实体并立即调用“21ѭ”将其取回,则结果是非常一致的,即您将获得该实体的最新快照。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?