众所周知,在关系数据库中,添加新列时,必须重新分配数据(ALTER TABLE without locking the table?)以在磁盘上保持单行连续。
我想了解如何在宽大的列存储上实现这一点,例如Cassandra,它们是sparses并且可以处理大量动态列插入(http://www.datastax.com/dev/blog/thrift-to-cql3(动态列族))
谢谢!
答案 0 :(得分:2)
在Cassandra中添加一个列有点像在关系数据库中添加行。您甚至可以删除特定行的列:
delete first_name from user where user_id='abcd';
在CQL中,alter table
不会修改所有行,简而言之,它只是修改描述表的模式字典(查看schema_
键空间中前缀为system
的表)。这只会更改CQL解析(现在可以识别新列)和解释(select * from user
含义已更改)。
删除列时,数据不再出现在查询结果中,但仍存在于SSTable中。在未来的压缩过程中(如墓碑),数据将被移除(并释放空间)。