当我使用cql与cli进行比较时,我看到在我的列族中创建了额外的列。
使用cql创建表并插入行:
cqlsh:cassandraSample> CREATE TABLE bedbugs(
... id varchar,
... name varchar,
... description varchar,
... primary key(id, name)
... ) ;
cqlsh:cassandraSample> insert into bedbugs (id, name, description)
values ('Cimex','Cimex lectularius','http://en.wikipedia.org/wiki/Bed_bug');
现在使用cli插入列:
[default@cassandraSample] set bedbugs['BatBedBug']['C. pipistrelli:description']='google.com';
Value inserted.
Elapsed time: 1.82 msec(s).
[default@cassandraSample] list bedbugs
... ;
Using default limit of 100
Using default column limit of 100
-------------------
RowKey: Cimex
=> (column=Cimex lectularius:, value=, timestamp=1369682957658000)
=> (column=Cimex lectularius:description, value=http://en.wikipedia.org/wiki/Bed_bug, timestamp=1369682957658000)
-------------------
RowKey: BatBedBug
=> (column=C. pipistrelli:description, value=google.com, timestamp=1369688651442000)
2 Rows Returned.
cqlsh:cassandraSample> select * from bedbugs;
id | name | description
-----------+-------------------+--------------------------------------
Cimex | Cimex lectularius | http://en.wikipedia.org/wiki/Bed_bug
BatBedBug | C. pipistrelli | google.com
因此,cql为每一行创建一个额外的列,其中包含空的非主键列。这不是浪费空间吗?
2条答案
按热度按时间hof1towb1#
使用cqlsh和指定的主键(id,name)创建列族时,cassandra将为存储的数据创建两个索引,一个用于按id排序的数据,另一个用于按名称排序的数据。但是当您使用cassandracli执行此操作时,您的列族没有索引列。cassandra cli不支持具有辅助索引。我希望我对你说得通我缺乏语言来解释我的理解。
ncecgwcz2#
为了与cassandra cli兼容并防止创建此额外列,请将create table语句更改为包含“with compact storage”。
此处描述
所以
变成
在cql中,使用紧凑型存储还可以支持宽行。