kre*_*lst 5 bigdata google-cloud-platform google-cloud-bigtable
我们目前正在调查使用多个列族对我们的 bigtable 查询性能的影响。我们发现将列拆分为多个列族并不会提高性能。有没有人有过类似的经历?
关于我们的基准设置的更多细节。此时,我们生产表中的每一行都包含大约 5 列,每列包含 0.1 到 1 KB 的数据。所有列都存储在一个列族中。执行行键范围过滤器(平均返回 340 行)并应用列正则表达式拟合器(每行仅返回 1 列)时,查询平均需要 23.3 毫秒。我们创建了一些测试表,其中每行的列/数据量增加了 5 倍。在测试表 1 中,我们将所有内容都保留在一个列族中。正如预期的那样,这将同一查询的查询时间增加到 40.6 毫秒。在测试表 2 中,我们将原始数据保留在一个列族中,但将额外的数据放入另一个列族中。当查询包含原始数据的列族(因此包含与原始表相同的数据量)时,查询时间平均为 44.3ms。所以当使用更多的列族时,性能甚至会下降。
这与我们预期的完全相反。例如,这在 bigtable 文档中提到(https://cloud.google.com/bigtable/docs/schema-design#column_families)
将数据分组到列族允许您从单个族或多个族中检索数据,而不是检索每一行中的所有数据。尽可能紧密地对数据进行分组,以便在最频繁的 API 调用中仅获取您需要的信息,但仅此而已。
有人对我们的发现有解释吗?
(编辑:添加了更多细节)
单行内容:
表一:
CF1
表二:
我们正在执行的基准测试是使用 go 客户端。调用API的代码基本如下:
filter = bigtable.ChainFilters(bigtable.FamilyFilter(request.ColumnFamily),
bigtable.ColumnFilter(colPattern), bigtable.LatestNFilter(1))
tbl := bf.Client.Open(table)
rr := bigtable.NewRange(request.RowKeyStart, request.RowKeyEnd)
err = tbl.ReadRows(c, rr, func(row bigtable.Row) bool {return true}, bigtable.RowFilter(filter))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |