GAE 数据存储性能(列与 ListProperty)

Posted

技术标签:

【中文标题】GAE 数据存储性能(列与 ListProperty)【英文标题】:GAE Datastore Performance (Column vs ListProperty) 【发布时间】:2011-06-11 06:48:48 【问题描述】:

看了“Google IO 2009: Building scalable, complex apps on App Engine”之后,我做了一些测试来帮助理解对列表反序列化的影响,但结果相当令人惊讶。以下是测试说明。

所有测试都在 GAE 服务器上运行。 每个测试执行 5 次,并记录其时间和 CPU 使用率。 这个测试是比较 Columns V.S List 中获取(浮动)数据的速度 Column 和 List 表都包含一个额外的 datetime 列用于查询。 使用相同的查询来获取 Column 表和 List 表上的数据。

测试 1 - 获取单行 - 表格大小:500 列 vs 500 列(均包含 500 行)

表:ChartTestDbRdFt500C500R OneRowCol 结果 [0] 0.02 (52) [1] 0.02 (60) [2] 0.02 (56) [3] 0.01 (46) [4] 0.02 (57)

表:ChartTestDbRdFt500L500R OneRowLst 结果 [0] 0.01 (40) [1] 0.02 (38) [2] 0.01 (42) [3] 0.05 (154) [4] 0.01 (41)

测试 2 - 获取所有行 - 表格大小:500 列 vs 500 列(均包含 500 行)

表:ChartTestDbRdFt500C500R AllRowCol 结果 [0] 11.54 (32753) [1] 10.99 (31140) [2] 11.07 (31245) [3] 11.55 (37177) [4] 10.96 (34300)

表:ChartTestDbRdFt500L500R AllRowLst 结果 [0] 7.46 (20872) [1] 7.02 (19632) [2] 6.8 (18967) [3] 6.33 (17709) [4] 6.81 (19006)

测试 3 - 获取单行 - 表格大小:4500 列 vs 4500 列(均包含 10 行)

表:ChartTestDbRdFt4500C10R OneRowCol 结果 [0] 0.15 (419) [1] 0.15 (433) [2] 0.15 (415) [3] 0.23 (619) [4] 0.14 (415)

表:ChartTestDbRdFt4500L10R OneRowLst 结果 [0] 0.08 (212) [1] 0.16 (476) [2] 0.07 (215) [3] 0.09 (242) [4] 0.08 (217)

结论

获取 N 个项目的列表实际上比 N 列更快。有谁知道为什么会这样?我认为列表反序列化会影响性能?还是我的测试不正确?任何见解都会有所帮助,谢谢!

【问题讨论】:

【参考方案1】:

BigTable 是一个面向列的数据库。

这意味着获取 N 列的“行”实际上是 N 次不同的读取操作,都在同一个索引上。

【讨论】:

感谢您的回复。经过一番思考,我意识到我应该构建我的 2 个具有相同列数的表,一个包含 N 行数据,另一个包含一行 N 个数据的列表。顺便说一句,您能否提供有关“N 列 = N 读取操作”的参考?我认为 BigTable 是面向行+列的设计的混合,其中同一列族中的实体的所有列限定符都在一次操作中获取?

以上是关于GAE 数据存储性能(列与 ListProperty)的主要内容,如果未能解决你的问题,请参考以下文章

GWT 应用程序的数据存储位置 - GAE 数据存储或 XML 文件

GWT 编辑器和 GAE 数据存储

是否可以在多个 GAE 应用程序之间共享数据存储

如何从 GAE 数据存储中导出 BLOB 类型字段?

如何从 GAE 数据存储中删除列(属性)?

无法从数据存储 GAE 中检索数据