宽列数据库如何在存储布局上实现动态列?

时间:2015-04-15 00:42:26

标签: cassandra nosql

众所周知,在关系数据库中,添加新列时,必须重新分配数据(ALTER TABLE without locking the table?)以在磁盘上保持单行连续。

enter image description here

我想了解如何在宽大的列存储上实现这一点,例如Cassandra,它们是sparses并且可以处理大量动态列插入(http://www.datastax.com/dev/blog/thrift-to-cql3(动态列族))

谢谢!

1 个答案:

答案 0 :(得分:2)

在Cassandra中添加一个列有点像在关系数据库中添加行。您甚至可以删除特定行的列:

delete first_name from user where user_id='abcd';

在CQL中,alter table不会修改所有行,简而言之,它只是修改描述表的模式字典(查看schema_键空间中前缀为system的表)。这只会更改CQL解析(现在可以识别新列)和解释(select * from user含义已更改)。

删除列时,数据不再出现在查询结果中,但仍存在于SSTable中。在未来的压缩过程中(如墓碑),数据将被移除(并释放空间)。