我刚刚开始研究Cassandra。 我对二级密钥的概念感到有些困惑。
从我理解的定义中,对未排序的表的非键属性进行索引是辅助索引。
所以我有这张桌子
CREATE TABLE IF NOT EXISTS userschema.user (id int,name text, address text, company text, PRIMARY KEY (id, name))
所以如果我像这样创建索引
CREATE INDEX IF NOT EXISTS user_name_index ON userschema.user (name)
这应该是二级索引。
但我的要求是创建包含列名称,id,公司的索引。
如何在Cassandra中创建这样的二级索引?
我得到了this链接,它定义了这个简短的内容,但为什么这些二级索引不仅仅是表格?
以上用户表只是实例而非实际的。
我正在使用Cassandra 3.0.9
答案 0 :(得分:1)
SELECT * FROM table WHERE id=1
SELECT * FROM table WHERE id=1 and name='some value'
SELECT * FROM table WHERE name='some value' ALLOW FILTERING (This is inefficeint)
和CREATE INDEX IF NOT EXISTS company_index ON userschema.user (company)
已经是主键的一部分。
以下查询将起作用
SELECT * FROM table WHERE id=1 and name='some value' and company='some value'
您可以在公司列
上创建二级索引SELECT * FROM table WHERE company='some value' ALLOW FILTERING
现在,一旦定义了二级索引,就可以在where子句和主键中使用它。
{{1}}
虽然{{1}}有效但效率很低。
在创建二级索引之前,请查看When to use secondary index in cassandra
答案 1 :(得分:0)
您所引用的链接主要关注物化视图,我们在其中创建虚拟表以使用非主键执行查询。 此外,您似乎正在主键上创建辅助密钥,您已在创建表中定义了该密钥。永远记住,二级索引应该是非主键。
要清楚了解二级索引 - 请参阅此https://docs.datastax.com/en/cql/3.3/cql/cql_using/useSecondaryIndex.html
现在,二级指数的替代方法的优缺点
1.Materialized views:
它将创建新的虚拟表,您应该使用旧表和原始表中的旧主键以及新物化表中的新虚拟主键在虚拟表中运行查询。原始旧表中数据修改的任何更改都将反映在物化表中。如果删除实体化表,但数据将创建为gcc_graceseconds为864000(10天)默认值的逻辑删除。删除物化表对原始表没有任何影响。
2.REALL FILTERING:
这是非常低效的,并且根本不建议使用允许过滤,因为延迟会很高并且性能会降低。
如果您想了解更多信息,请参阅此链接How do secondary indexes work in Cassandra?
如果我错了,请纠正我