ndb的缓存如何处理压缩属性?

时间:2012-08-15 15:10:21

标签: google-app-engine app-engine-ndb

我正在考虑在某些大compressed = True个属性上启用compression(设置LocalStructuredProperty)。

但是,这些是经常读写的实体,因此我担心编码/解码这些属性所需的额外CPU。

我想知道ndb的内置缓存系统是否会缓解这个问题? ndb是否缓存这些属性的压缩或未压缩数据?我意识到压缩总是会在每次写入时发生,但如果我在读取缓存实体时至少可以绕过解压缩,那么它可能是值得的。

1 个答案:

答案 0 :(得分:6)

NDB使用延迟解压缩和压缩,如果您有一个缓存在内存中的实体(在Context对象中),它只会在您第一次实际访问该属性时解压缩。此外,如果您在不访问压缩属性的情况下读取实体并将其写回,则根本不会对其进行解压缩和压缩(无论是否进行缓存)。

但是这些值是以压缩形式写入memcache的,所以如果您实际访问压缩属性,缓存对您没有多大帮助。

我的建议:只有在没有它的情况下数据太大而无法适应时才使用压缩(整个实体的限制为~1MB),然后只有在压缩得很好的数据类型时才使用压缩(例如文本,但不是图像或其他媒体,因为这些格式已经有自己的媒体特定压缩)。日志行压缩得很好。英文文本或计算机源代码压缩得很好。