【发布时间】:2015-06-10 04:23:34
【问题描述】:
我们有一个包含 1500 万条记录的表,我们的表是一个 10 节点的 cassandra 集群。我们有一列有接近 20 个可重复的值。是否建议在此列上建立二级索引?
【问题讨论】:
标签: cassandra cql datastax-java-driver cql3
我们有一个包含 1500 万条记录的表,我们的表是一个 10 节点的 cassandra 集群。我们有一列有接近 20 个可重复的值。是否建议在此列上建立二级索引?
【问题讨论】:
标签: cassandra cql datastax-java-driver cql3
假设在该列上完全均匀分布,则每列值将映射到 750,000 行。现在,When To Use An Index 上的 DataStax 文档指出...
内置索引最适用于具有许多包含索引值的行的表。
750,000 行当然可以称为“很多”。但即便如此,请记住,您还谈到 Cassandra 在完成查询时必须忽略的 14,250,000 行。
此外,除非您的 RF 为 10(我怀疑您会使用 10 个节点),否则您将需要花费网络时间,因为 Cassandra 在完成查询所需的所有不同节点之间工作。对于 750,000 行,这可能会超时。
我认为这可能有效的唯一方法是首先通过分区键限制您的查询。使用二级索引同时使用分区键进行限制将有助于 Cassandra 更快地找到您的行。即便如此,对于这么大的数据集,我会重新评估您的数据模型并尝试找出不同的表来完成该查询,而无需二级索引。
【讨论】: