我刚刚开始研究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)这应该是辅助索引。
但我的要求是创建包含列name、id、company的索引。
如何在Cassandra中创建这样的二级索引?
我得到了this链接,它定义了一些简短的东西,但是为什么这些二级索引不是表呢?
上面的用户表只是一个例子,而不是实际的用户表。
我使用的是Cassandra 3.0.9
发布于 2017-11-21 14:26:33
id和name已经是主键的一部分。
因此,下面的查询将起作用
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)现在,一旦定义了辅助索引,它就可以与主键一起在where子句中使用。
SELECT * FROM table WHERE id=1 and name='some value' and company='some value'虽然SELECT * FROM table WHERE company='some value' ALLOW FILTERING可以工作,但它的效率会非常低。
在创建二级索引之前,先看一下When to use secondary index in cassandra
发布于 2017-11-21 19:45:47
您提到的链接主要集中在物化视图上,在物化视图中,我们创建虚拟表来执行具有非主键的查询。此外,您似乎是在主键上创建辅键,您在创建表时已经定义了主键。请始终记住,辅助索引应该是非主键。
要清楚地了解二级索引-请参阅此https://docs.datastax.com/en/cql/3.3/cql/cql_using/useSecondaryIndex.html
现在,二级索引的替代方法的优缺点
1.物化视图:
它将创建新的虚拟表,您应该使用旧表和原始表中的旧主键以及新物化表中的新虚拟主键在虚拟表中运行查询。原始表中的任何数据修改都会反映在物化表中。如果删除实体化表,但数据将被创建为逻辑删除,其gcc_graceseconds为默认值864000(10天)。删除物化表不会对原始表产生任何影响。
2. 2.ALLOW过滤:
这是非常低效的,并且根本不建议使用允许过滤,因为延迟将很高,性能将会降低。
如果您想了解更多信息,也可以参考此链接How do secondary indexes work in Cassandra?
如果我错了,请纠正我
https://stackoverflow.com/questions/47398158
复制相似问题