我不确定使用非常常用的共享列值(如Country
)作为复合主键的分区键还是使用相当独特的列值(如Last_Name
)是否更好,性能方面。
查看Cassandra 1.2 的有关索引的文档,我得到以下信息:
"何时使用索引:Cassandra 的内置索引最适用于具有许多包含索引值的行的表。特定列中存在的唯一值越多,平均而言,查询和维护索引。例如,假设您有一个包含十亿用户的用户表,并希望通过他们所居住的州来查找用户。许多用户将共享相同的状态列值(例如 CA、NY、TX 等) .). 这将是一个很好的索引候选者。 ”
"何时不使用索引:不要使用索引来查询大量记录以获得少量结果。例如,如果您在具有许多不同值的列上创建索引,则字段之间的查询将招致许多寻求很少的结果。在有十亿用户的表中,通过电子邮件地址(每个用户通常唯一的值)而不是状态来查找用户可能非常低效。将表手动维护为索引形式而不是使用 Cassandra 内置索引可能会更有效。对于包含唯一数据的列,有时为方便起见使用索引在性能方面很好,只要对具有索引列的表的查询量适中且不是处于恒定负载下。”
“查询复合主键和排序结果”,我看到类似 UUID 的东西被用作分区键......这表明最好使用相当独特的东西?