1

在观看了“ Google IO 2009:在 App Engine 上构建可扩展、复杂的应用程序”之后,我进行了一些测试以帮助了解对列表反序列化的影响,但结果非常令人惊讶。以下是测试说明。

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

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

表:ChartTestDbRdFt500C500R <-- 500 列 x 500 行
OneRowCol 结果 <-- 获取一行
[0] 0.02 (52) <-- 测试 0,所用时间 = 0.02,CPU 使用率 = 52
[1] 0.02 (60)
[2 ] 0.02 (56)
[3] 0.01 (46)
[4] 0.02 (57)

表:ChartTestDbRdFt500L500R <-- 500 x 500 行列表
OneRowLst 结果
[0] 0.01 (40)
[1] 0.02 (38)
[2] 0.01 (42)
[3] 0.05 (154)
[4] 0.01 (41)

测试 2
- 获取所有行
- 表大小:500 列与 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 列与 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列更快。有谁知道为什么会这样?我认为列表反序列化会影响性能?还是我的测试不正确?任何见解都会有所帮助,谢谢!

4

1 回答 1

1

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

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

于 2011-01-18T18:30:10.623 回答