eag*_*arn 6 cql cql3 cassandra-2.0
考虑这个例子:
create table bite (
id varchar PRIMARY KEY,
feedid varchar,
score bigint,
data varchar
);
create index bite_feedid on bite (feedid);
create index bite_score on bite (score);
Run Code Online (Sandbox Code Playgroud)
我不确定最后两行是create index..
做什么的?它为什么如此重要?它会创建一个新表吗?如果是这样,我该怎么看?
谢谢
辅助索引使用索引列作为主键创建新表.这种方法的优点是您对表的写/删除操作将自动转换为多次操作,您不必关心它.既然Cassandra支持记录批次,它似乎不是一个很大的优势,但在Cassandra 0.7 ... 1.1是一个很大的东西.
当索引上的查询将始终检索一个结果时(例如:将二级索引放在uuid上),不应使用二级索引.
si的一个很好的特性是,您可以在不知道主键的任何内容的情况下查询单个列,并将主键的一部分与辅助索引(使用AND运算符)组合在一起.
您不能在AND中组合多个二级索引的WHERE子句.
HTH,卡罗
create index为表创建二级索引.在cassandra中,数据存储在跨节点的分区中 - 一个分区对应于一个分区键 - 这是主键的第一个键.主键中的剩余键构成群集键.例如,如果您有以下内容:
CREATE TABLE foo.people(id int,name text,age int,job text,PRIMARY KEY(id,name,job))
id将是分区键,name和job将是群集键.
分区中的数据按聚类键的顺序存储.使用过滤器查询时,指定分区键,然后可以根据群集键过滤掉.对于多个群集键,必须指定以前的群集才能使用特定群集.例如,在上述场景中,您可以这样做
其中id = 2且name ='john'和job ='dev'或其中id = 2且name ='john'
但不是id = 2和job ='dev'作为名称出现在聚类键中的作业之前.
您不能对年龄进行过滤,因为它不是密钥的一部分.这是二级索引的用武之地.如果你这样做:在人(年龄)上创建索引blah
你将被允许这样做:从年龄= 45岁的人中选择*;
这可能会很昂贵,因为它会在您的群集中进行查询.以下情况可能是有效的:从id = 2且年龄= 45的人中选择*;
这对于时间序列或其他宽行格式很有用.
对二级索引的查询是限制性的 - 例如,您不能进行范围查询 - 您仅限于=检查.
cassandra中的二级索引可以节省您自己维护索引表的麻烦,并且比您手动执行此操作更有效.它们最终是一致的(您的写入不会等待索引更新以返回成功),并且当前,节点数据的索引信息存储在本地.
最后,您可以从系统键空间中的"IndexInfo"表中找到当前的索引.
希望有所帮助.
归档时间: |
|
查看次数: |
4366 次 |
最近记录: |