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

Pas*_*que 2 google-app-engine app-engine-ndb

我正在考虑在一些大的属性上启用压缩(设置compressed = True)LocalStructuredProperty.

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

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

Gui*_*sum 6

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

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

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