Google Bigtable:时间戳扫描
Google Bigtable: Timestamp scan
我看到 Bigtable 被设计为只有 1 个主索引,即行键。
但是我现在意识到我想按添加行的时间范围扫描 Bigtable 。我应该如何实施?是否有可能或者我应该考虑其他类似 Cloud Datastore 的东西?
目前我的行键只是一个散列,像这样:ABC1234567。我可以为其添加时间戳(例如 ABC1234567#20180524) 然后在行键上使用正则表达式过滤器按时间范围扫描吗?此扫描不必非常快。
但是当我寻找哈希(需要快速)时,我需要使用前缀扫描而不是精确匹配。我不确定这可能会对性能产生影响。
另一个解决方案可能是添加另一个 table 来存储时间戳信息。
还需要考虑的一件事是,我使用的 Node.js client 目前处于 alpha 阶段,因此它可能没有所有必要的工具。
我不知道这个问题是否可以被标记为重复,但我认为这个其他问题的答案可能会回答你的问题:
此外,您可以查看 TimestampRange here. and about the composition of the key here:
Each row is essentially a collection of key/value entries, where the
key is a combination of the column family, column qualifier and
timestamp. If a row does not include a value for a specific key, the
key/value entry is simply not present.
我们这里有很多关于正确的时间序列模式设计的文档:https://cloud.google.com/bigtable/docs/schema-design-time-series。
在您的特定情况下,将时间戳附加到散列的末尾是可行的。如果您想在所有哈希中搜索 2018 年 3 月的行,则每次使用正则表达式过滤器时都需要对整个 table 进行全面扫描。
当您需要按哈希查找时,这仍然会很快,因为您会按前缀搜索,而 bigtable 将能够高效地找到它,因为它依赖于字典排序。
你提到的最后一个选项,有一个单独的 table,称为非规范化,如果你需要两种类型的查询都很快,这是一个选项。
我看到 Bigtable 被设计为只有 1 个主索引,即行键。 但是我现在意识到我想按添加行的时间范围扫描 Bigtable 。我应该如何实施?是否有可能或者我应该考虑其他类似 Cloud Datastore 的东西?
目前我的行键只是一个散列,像这样:ABC1234567。我可以为其添加时间戳(例如 ABC1234567#20180524) 然后在行键上使用正则表达式过滤器按时间范围扫描吗?此扫描不必非常快。 但是当我寻找哈希(需要快速)时,我需要使用前缀扫描而不是精确匹配。我不确定这可能会对性能产生影响。
另一个解决方案可能是添加另一个 table 来存储时间戳信息。
还需要考虑的一件事是,我使用的 Node.js client 目前处于 alpha 阶段,因此它可能没有所有必要的工具。
我不知道这个问题是否可以被标记为重复,但我认为这个其他问题的答案可能会回答你的问题:
此外,您可以查看 TimestampRange here. and about the composition of the key here:
Each row is essentially a collection of key/value entries, where the key is a combination of the column family, column qualifier and timestamp. If a row does not include a value for a specific key, the key/value entry is simply not present.
我们这里有很多关于正确的时间序列模式设计的文档:https://cloud.google.com/bigtable/docs/schema-design-time-series。
在您的特定情况下,将时间戳附加到散列的末尾是可行的。如果您想在所有哈希中搜索 2018 年 3 月的行,则每次使用正则表达式过滤器时都需要对整个 table 进行全面扫描。
当您需要按哈希查找时,这仍然会很快,因为您会按前缀搜索,而 bigtable 将能够高效地找到它,因为它依赖于字典排序。
你提到的最后一个选项,有一个单独的 table,称为非规范化,如果你需要两种类型的查询都很快,这是一个选项。