我想评估Cloud Bigtable在获取具有特定前缀的键的许多行计数方面的性能。
假设一个模式的行键末尾带有unix时间戳,例如from math import gcd
def is_carm(n):
""" Check whether n is a Carmichael number """
for b in range(2, n):
# If b is relatively prime to n
if gcd(b, n) == 1:
# If pow(b, n-1) % n is not 1, not Carmichael
if pow(b, n-1, n) != 1:
return False
return True # Carmichael!
。
如果我需要获取20个不同的event_id中的每一个的总行数,Cloud Bigtable可以有效地做到这一点吗?我会使用前缀或行范围查询来做到这一点。
答案 0 :(得分:5)
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上找到更多信息。
答案 1 :(得分:4)
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))