如何解决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 举报,一经查实,本站将立刻删除。