低基数列cassandra的二级索引

secondary indexes for low cardinality columns cassandra

我们有一个包含 1500 万条记录的 table,我们的是一个 10 节点的 cassandra 集群。我们有一列有接近 20 个 repeatable 值。是否建议在此列上建立二级索引?

假设在该列上完全均匀分布,那么每个列值将映射到 750,000 行。现在 When To Use An Index 上的 DataStax 文档指出...

built-in indexes are best on a table having many rows that contain the indexed value.

750,000 行当然符合 "many." 但即便如此,请记住,您还在谈论 Cassandra 在完成查询时必须 忽略 的 14,250,000 行。

此外,除非您的 RF 为 10(而且我怀疑您是否会使用 10 个节点),否则您将花费​​网络时间,因为 Cassandra 在完成您的查询所需的所有不同节点之间工作。对于 750,000 行,这可能会超时。

我认为这可能有效的唯一方法是首先通过分区键限制您的查询。使用二级索引同时使用分区键进行限制将有助于 Cassandra 更快地找到您的行。即便如此,对于这么大的数据集,我会重新评估您的数据模型并尝试找出不同的 table 来完成该查询而无需二级索引。