在datastore中使用最终一致性读取

标签:Google App Engine, Python

昨天Google App Engine Team发了一篇《Read Consistency & Deadlines: More control of your Datastore》,不过服务器挂了3天,没法及时写上,所以今天再补上。

SDK 1.3.2发布时曾提到了强一致性和最终一致性读取,但是没有讲述细节,而这篇文章则阐述了其区别。
默认情况下,datastore是在一个主存储区域进行更新和查询的,这个区域代表最新的数据,访问这个区域则表示使用强一致性。而主存储区域有可能变得暂时不可用(估计是并发数过多或硬件故障),这就会导致查询超时或失败。
而实际上datastore是分布式的,它还有很多副存储区域。这些副存储区域的数据比主存储区域晚几百毫秒至数秒,因而不是最新的。如果你的应用不需要这种强一致性,就可以在主存储区域不可用时,让datastore读取其他存储区域的副本,而这就称为最终一致性读取。

GAE SDK 1.3.2 版发布+路线图更新

标签:Google App Engine

刚在Google App Engine Blog看到GAE SDK 1.3.2发布了,和之前的Pre-release差不多。

这次介绍了强一致性读取和最终一致性读取。强一致性读取会在获取和查询时等待所有待处理(已提交,但还未应用到分布式存储器上)的数据,而最终一致性读取只读当前可用的数据,后者在不需要获取完整数据的情况下,可以有效降低读取时间。

防止DoS攻击的配置文档也有了,实际上就是一个黑名单。最多有100项条目,不过支持子网,也支持IP v6。后台也可以查看IP的访问次数,帮助你你决定屏蔽。

邮件API中,InboundEmailMessage的attachments属性已变成列表,而不管附件的个数。

GAE下周开始支持IPv6

标签:Google App Engine

刚在Google App Engine Blog看到的消息,GAE从下周起开始支持IPv6。

os.environ["REMOTE_ADDR"]将可能获得一个IPv6的地址,因此如果你的代码不兼容的话,可能需要改动。当然,如果你的代码不依赖IP地址,那么就可以完全忽略这点。

不索引Expando的动态属性

标签:Google App Engine, Python

Expando相比Model来说,多了个动态属性。为了少定义一些模型类,也许用动态属性比较方便,但这又牵扯到一个性能问题:动态属性无法像静态属性一样设置indexed=False。
对我的应用而言,大多数的静态属性是需要索引的,而动态属性则不需要,这便造成了浪费。

在GAE论坛提了半天也没等到好的解决办法,于是自己翻了下源码,发现Model类有个_unindexed_properties私有属性,这里面便是不需要索引的属性名了。

于是这样便可让动态属性不索引:

« 看看还有什么好玩意