【问题标题】:GAE Datastore Performance (Column vs ListProperty)GAE 数据存储性能(列与 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 列更快。有谁知道为什么会这样?我认为列表反序列化会影响性能?还是我的测试不正确?任何见解都会有所帮助,谢谢!

【问题讨论】:

    标签: performance list google-cloud-datastore deserialization


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。经过一番思考,我意识到我应该构建我的 2 个具有相同列数的表,一个包含 N 行数据,另一个包含一行 N 个数据的列表。顺便说一句,您能否提供有关“N 列 = N 读取操作”的参考?我认为 BigTable 是面向行+列的设计的混合,其中同一列族中的实体的所有列限定符都在一次操作中获取?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2011-05-07
    • 1970-01-01
    • 2018-08-13
    • 2011-08-26
    相关资源
    最近更新 更多