Cassandra源代码分析(二)动态变更Keyspace和ColumnFamily定义

参考:http://wiki.apache.org/cassandra/LiveSchemaUpdates

本节讲述的是Cassandra0.7版本的一些特性,即在Cassandra集群运行过程中动态修改Keyspace的数据模型。

1.   揭开神秘面纱

Cassandr中有一个名称为SystemKeyspace,它包含4Columnspace,分别为LocationInfoHintsColumnFamily MigrationsSchema,具体的定义参见类CFMetaDataSchema中存储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,这个ColumnTimeUUID作为Row key(也作为一个版本标识),Keyspace名称作为一个列名称,Keyspace定义的序列化数据作为ColumnValue。存在着一个特殊行,以Last Migration作为RowKey,这个行包含一列,表示当前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被执行。在进行RenameDrop操作的时候,客户端会阻塞,直到所有关联的文件被Rename或者Drop为止。


 

你可能感兴趣的:(schema,System,存储,cassandra,migration,代码分析)