2

tldr:在一行中有 1 到 10 列的约 90,000 个超级列是否太多?1500 左右怎么样?列值每个约为 6 个字节。

完整的问题

我正在研究时间序列数据的各种数据存储。Cassandra 和 HBase 等面向列的数据库看起来非常适合。

要求是以(最小)1 分钟间隔存储数百万个数据系列。理想情况下,如果业务需要,我们将能够支持 1 秒的间隔(他们可能会这样做)。

这篇文中提供的以及OpenTSDB使用的建议非常有意义。

本质上,键是与当天的第一个时间戳连接的系列 ID,为当天的每个测量创建列。也就是每行大约 86400 列。

然而,数据的不变性/版本控制非常重要。业务需求决定了在保留数据完整历史记录的同时更新系列值的能力。

探索 Cassandra 的超级列以提供另一个维度以对值进行版本化,从而产生 86400 个超级列。然后,每个超级列将在第一次创建值时包含一列(可能是 TimeUUID),然后在每次“更新”时再添加一列。将定期更新有限的系列和值子集。在理想条件下不会有更新。理想情况下,这意味着每个超级列都不需要加载大量数据,并且大多数访问将仅访问最近的值。

所以回到这个问题:

每行使用那么多(86k)超级列是否存在性能损失或问题?

4

1 回答 1

2

保守地采用 100K 超级列和每个超级列 1K 得出每行 100MB,这在 Cassandra 可以处理的范围内。

您应该考虑的另一个因素是,您有多少行。“一大行”是一个糟糕的数据模型,因为行是分区的单位。只要行数多于节点数,就可以了。

于 2012-01-25T04:49:21.767 回答