【问题标题】:Performance of Cloud Bigtable row countsCloud Bigtable 行数的性能
【发布时间】:2018-08-13 17:53:45
【问题描述】:
我想衡量 Cloud Bigtable 在抓取具有特定前缀的键的许多行数方面的性能。
假设架构的行键末尾带有 unix 时间戳,例如,event_id#unix_timestamp。
如果我需要获取 20 个不同 event_id 中每一个的总行数,那么 Cloud Bigtable 这样做是否有效?我会使用前缀或行范围查询来执行此操作。
【问题讨论】:
标签:
google-cloud-bigtable
【解决方案1】:
Cloud Bigtable 服务在此类查询方面表现出色,GoLang 库的表现也相当出色。
时间戳查询有点棘手。通常,时间序列的用户希望获得诸如“获取最新的 N 值”之类的查询。 Bigtable 仅以递增值返回数据,因此您必须创建一个范围从 event_id#{max int64 - unix_timestamp} 开始的架构,您还需要一个 LimitRows 来获取最新的 N。
对于 Cloud Bigtable,重要的是要提出您将如何处理数据的问题。这将告知您对架构的选择。
Cloud Bigtable 有一个“discuss”小组用于一般性讨论,GitHub 存储库用于针对特定语言的功能请求/问题。你可以在https://cloud.google.com/bigtable/docs/support/getting-support找到更多信息。
【解决方案2】:
Cloud Bigtable 没有计数操作,您必须按键前缀查询行并使用过滤器来最小化每行返回的数据量。例如:
rowSet = RowRangeList(PrefixRange("event_id#"),...)
filter = ChainFilters(CellsPerRowLimitFilter(1), StripValueFilter())
count := 0
table.ReadRows(ctx, rowSet, func(r Row) bool {
count++
return true
}, RowFilter(filter))