CQL表中的空列

时间:2014-04-01 15:34:53

标签: cassandra cql

我目前正在尝试将项目从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中你可以做什么,你可以做什么节俭甚至更多。

1 个答案:

答案 0 :(得分:2)

那些“空”列是“CQL行”标记,Cassandra在内部使用它们。是的,那些需要额外的存储空间,但它们可以让您灵活地在以后更改模式。

使用COMPACT STORAGE将没有存储开销,但是您的表的架构将一成不变。

http://www.datastax.com/dev/blog/thrift-to-cql3

提供了很好的解释