2

我正在考虑在一些大属性上启用压缩(设置)。compressed = TrueLocalStructuredProperty

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

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

4

1 回答 1

6

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

但是,这些值是以压缩形式写入内存缓存的,因此如果您实际访问压缩属性,缓存不会对您有太大帮助。

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

于 2012-08-15T20:28:14.243 回答