参考:http://wiki.apache.org/cassandra/LiveSchemaUpdates
本节讲述的是Cassandra0.7版本的一些特性,即在Cassandra集群运行过程中动态修改Keyspace的数据模型。
1. 揭开神秘面纱
在Cassandr中有一个名称为System的Keyspace,它包含4个Columnspace,分别为LocationInfo、HintsColumnFamily、 Migrations、Schema,具体的定义参见类CFMetaData。Schema中存储keyspace定义信息,Migrations中记录了keyspace的变更信息。
TimeUUIDs are used throughout to match migrations up with schema and vice-versa.
2.Keyspace Definitions (SCHEMA_CF)
当前的Keyspace定义被存储在一个Row中,一个Keyspace对应一个Column,这个Column以TimeUUID作为Row key(也作为一个版本标识),Keyspace名称作为一个列名称,Keyspace定义的序列化数据作为Column的Value。存在着一个特殊行,以“Last Migration”作为Row的Key,这个行包含一列,表示当前Schema的版本UUID。这使得它易于查找和取得版本版本号。
3.Migrations (MIGRATIONS_CF)
Migration记录对于模型(Schema)的每一个变更(add,drop,rename)。Migration由一个以“Migrations Key”作为一个Row Key,一个变更作为一个Column。每一个Column有一个变更版本号UUID作为列名,以变更的序列化信息作为Column的值。
4. Operations 4.1 客户端操作
- 添加 column family or keyspace
- 删除 column family or keyspace
- 重命名 column family or keyspace
如果你拥有足够的权限,这些都可以通过Thrift API被执行。在进行Rename和Drop操作的时候,客户端会阻塞,直到所有关联的文件被Rename或者Drop为止。
4.1 客户端操作
- 添加 column family or keyspace
- 删除 column family or keyspace
- 重命名 column family or keyspace
如果你拥有足够的权限,这些都可以通过Thrift API被执行。在进行Rename和Drop操作的时候,客户端会阻塞,直到所有关联的文件被Rename或者Drop为止。