我看到Bigtable的设计只有一个主索引,即行键。 但是我现在意识到我想要在添加行的时间范围内扫描Bigtable。我该如何实现呢?是否有可能或者我应该考虑像Cloud Datastore这样的其他内容?
目前我的行键只是一个哈希,如下所示: ABC1234567 。我可以为其添加时间戳(例如 ABC1234567#20180524)然后使用行键上的正则表达式过滤器按时间范围进行扫描吗?这种扫描不一定非常快。 但是当我寻找哈希(需要快速)时,我需要使用前缀扫描而不是精确匹配。我不确定这可能会对性能产生什么影响。
另一种解决方案是添加另一个表来存储时间戳信息。
还需要考虑的另一件事是我现在正在使用alpha中的Node.js client,因此它可能没有必要的所有工具。
答案 0 :(得分:1)
我们这里有很多有关正确的时间序列模式设计的文档:https://cloud.google.com/bigtable/docs/schema-design-time-series。
在您的特定情况下,可以将时间戳记附加到哈希的末尾。如果要在2018年3月搜索所有哈希中的行,则每次使用正则表达式过滤器时都需要对整个表进行全面扫描。
当您需要按哈希查找时,这仍然会很快,因为您可以按前缀搜索,并且bigtable可以依靠字典顺序高效地找到它。
您提到的最后一个选项具有一个单独的表,称为非规范化,如果需要两种类型的查询都要快速,则该选项是一个选项。
答案 1 :(得分:0)
我不知道是否可以将此问题标记为重复,但是我认为这个其他问题可以回答您的问题:
Row timestamps in Bigtable - when are they updated?
此外,您还可以查看有关TimestampRange here.和composition of the key here的信息:
每行本质上是键/值条目的集合,其中 键是 列族 , 列限定符 和 时间戳。如果某行不包含特定键的值,则 键/值输入根本不存在。