Mik*_*ike 3 database bigtable google-cloud-bigtable
在https://cloud.google.com/bigtable/docs/schema-design中,清楚地描述了如何选择表的行键。但我找不到任何有关如何编写此行键的信息。它是在哪里以及通过什么方式组成的?
组合行键是 BT 数据模型设计的重要组成部分。当您设计表时,您需要提前了解如何获取数据,以优化 BT 的使用。
BT 最擅长通过行键获取单行。因此,如果您可以将表(和应用程序的数据模型)设计为始终通过特定键获取,那就太棒了。
例如,每个用户都将其 userid(例如“1234”)作为其 rowkey。并且您总是按用户 ID 获取('获取用户 ID“1234”')。简单的。
但事情并不总是那么容易。在某些数据模型中,您需要的数据分散在多行中。这比前一种情况不太理想,但仍然可以工作。这种获取模式称为“扫描” - BT 支持它,但有一个重要的警告:它只能获取共享公共前缀的所有行。此外,与按行键获取相比,扫描速度也较慢。
在上面示例的上下文中,扫描意味着“获取用户 ID 以“123”开头的所有行”。当然,这没有多大意义:您很少需要通过共享前缀来提取用户 ID。但在某些数据模型中,使用扫描可能有意义。例如,如果您的行键是时间戳,并且您想要获取两个时间戳之间的所有项目。
您可以通过从不同字段组合行键来将其提升到一个新的水平 - 从而允许更有趣的扫描:
如果您的数据模型要求按用户 ID 和时间戳范围进行提取,则可以这样组成行键:“userid-timestmap”,然后提取以“1234-(start-timestmap)”开始并以“1234-(start-timestmap)”结束的所有行1234-(结束时间戳)”。我相信这就是“组合”行键的含义。
(另一件事要记住,正如此处另一个答案所提到的,您希望避免在表上创建“热点”:流行的行不应彼此相邻存储,以便优化并行更新和获取。由于行键按字典顺序存储在 BT 中,因此避免热点的一种方法是以流行的行键在字典顺序上彼此不接近的方式选择或组合行键。