Bigtable:在行键上使用时间戳时避免热点

问题描述 投票:1回答:1

Cloud Bigtable docs on schema design for time series说:

在绝大多数情况下,时间序列查询在给定时间段内访问给定数据集。因此,请确保给定时间段内的所有数据都存储在连续的行中,除非这样做会导致热点。

另外,here's what they recommend to avoid hotspotting

如果您正在存储手机的电池状态,并且您的行键包含“BATTERY”字样加上时间戳,则行键将始终按顺序增加。由于Cloud Bigtable在相同服务器节点上存储相邻的行键,因此所有写入将仅关注一个节点,直到该节点已满,此时写入将移至群集中的下一个节点。

建议进行实地推广:

将列数据中的字段移动到行键中以使写入不连续。

例如:

BATTERY#20150301124501001 --> BATTERY#Corrie#20150301124501001

问题:

  1. 现场推广可以解决热点问题。不过,这不会让时间范围的查询有点困难吗?
  2. 另一方面,如果您想仅通过TIMESTAMP查询范围,是否可以避免热点?不这么认为吧?

谢谢!

bigtable google-cloud-bigtable
1个回答
2
投票
  1. 现场推广可以解决热点问题。不过,这不会让时间范围的查询有点困难吗?

这取决于您的查询的样子。例如,如果要查询Corrie的电池状态从T1到T2,您可以轻松构建行范围:[BATTERY#Corrie#T1BATTERY#Corrie#T2]。但是,如果要查询所有用户的电池状态,则将扫描前缀为BATTERY的所有行。

因此,您所拥有的最重要的查询应该指定您将哪些字段提升为行键。此外,具有高基数的字段在提升为行键时会提供更多帮助,因为它们会将负载分配给大量平板电脑。

  1. 另一方面,如果您想仅通过TIMESTAMP查询范围,是否可以避免热点?不这么认为吧?

我不完全确定“查询范围只有时间戳”是什么意思,你能提供一个例子吗?

很多将取决于“TIMESTAMP”的含义。如果您总是想查询最近10分钟,那么您的所有查询都将在任何给定时间转到单个服务器,您将体验热点。

要记住的另一件事是,如果您没有正确设计行键,写入将遇到热点,您将无法获得良好的写入吞吐量。建议设计行键以避免热点。

© www.soinside.com 2019 - 2024. All rights reserved.