我目前正在尝试将项目从Cassandra的Thrift界面(我已经爱上了)迁移到CQL。我有以下困扰我的“问题”。我创建了一个事件表:
CREATE TABLE events (
eventKey uuid PRIMARY KEY,
type decimal,
severity decimal,
source inet
);
当我坚持使用CQL时,一切看起来都很棒。为了更好地理解,我在CLI中查看了它,发现对于每个条目(thrift行),我有一个空列:
[default@test] list events;
Using default limit of 100
Using default cell limit of 100
-------------------
RowKey: a9ddffba-3c30-4119-add8-966dddb38490
=> (name=, value=, timestamp=1396364167269000)
=> (name=type, value=0000000001fe, timestamp=1396364167269000)
=> (name=severity, value=00000000ff, timestamp=1396364167269000)
=> (name=source, value=0000000000000065, timestamp=1396364167269000)
-------------------
RowKey: a9ddffba-3c30-4119-add8-966aaab384a0
=> (name=, value=, timestamp=1396363462812000)
=> (name= source, value=0000000000000065, timestamp=1396363462812000)
-------------------
RowKey: a9ddffba-3c30-4119-add8-966aaab38490
=> (name=, value=, timestamp=1396364010098000)
=> (name= source, value=0000000000000066, timestamp=1396364010098000)
据我了解,这是因为我没有使用COMPACT MODE,因此Cassandra创建了一个列作为列名的索引。如果我使用宽行,即如果我的主键看起来像(eventKey,类型,严重性),这是完全合理的。但是,我不知道在这种情况下我是如何需要它的,虽然它只是一个空列,但它仍会产生一些额外的,但我认为不必要的数据量。有什么想法吗?我错过了什么吗?
如果我使用小型存储,我没有创建列。但是,我无法真正更改架构,因为“错误请求:无法从紧凑存储表中删除列” - 有人可以解释我吗?特别是因为它可以从CLI中继续阅读,我一直在阅读CQL中你可以做什么,你可以做什么节俭甚至更多。
答案 0 :(得分:2)
那些“空”列是“CQL行”标记,Cassandra在内部使用它们。是的,那些需要额外的存储空间,但它们可以让您灵活地在以后更改模式。
使用COMPACT STORAGE
将没有存储开销,但是您的表的架构将一成不变。