cassandra-按聚集键搜索

zhte4eai  于 2021-06-15  发布在  Cassandra
关注(0)|答案(1)|浏览(338)

这是我的 diseases 表定义:

id text,
drugid text,
name
PRIMARY KEY (drugid, id)

现在我要执行搜索 drugid 仅列(此列中的所有值都是唯一的)。此主键是由于快速药物搜索而创建的。
现在-什么是使用 id ? 创建新表?传递附加值( drugid )至 SELECT ? 这是唯一的选择吗 id ?
需要帮助:)

qltillow

qltillow1#

查看表定义,分区键是drugid。这意味着您的查询必须包含drugid。但由于id也是主键的一部分,您可以执行以下操作: select * from diseases where drugid = ? and id = ? 不幸的是,仅仅拥有这个id是不可能的,除非你在上面创建一个二级索引。这不是很好,因为你可以触发一个完整的群集扫描。
因此,解决方案是:
指定分区键(如果可能),在本例中为drugid
创建一个以id作为分区键的新表;在这种情况下,您需要维护两个表;
我想你选择的解决方案取决于你的数据集。您应该测试每个解决方案的行为。
你应该使用二级索引吗?
当指定分区键时,cassandra将从分区和一个节点读取精确的数据。
创建二级索引时,cassandra需要从分布在整个集群的分区中读取数据。当索引建立在具有许多不同值的列上时,会影响性能。下面是关于这个问题的更多阅读资料——规模上的Cassandra:二级索引的问题
在上面的文章中,@doanduyhai有一个有趣的评论:
“只有一种情况下,辅助索引可以很好地执行,而且不会出现可伸缩性问题:与分区键一起使用时。如果确保使用辅助索引的所有查询的格式为:

SELECT ... FROM ... WHERE partitionKey=xxx AND my_secondary_index=yyy

那你就安全了。更好的是,在这种情况下,你可以混合在许多二级指数。性能方面,由于所有的索引读取都是节点本地的,所以应该可以”
我会远离二级索引。
从您所描述的内容来看,id或多或少会有不同的值,因此您可能会遇到性能问题,因为“一般的经验法则是用很少的值作为低基数索引列”。
另外,如果id是一个集群列,那么数据将以有序的方式存储。群集列仅在分区键内确定数据的磁盘排序顺序。默认顺序为asc。
我建议你多读点书——什么时候不用索引,什么时候用二级索引

相关问题