Keyspace
提到Keyspace,可以把keyspace 想像成RDBMS中的database,而database 的层次应该是database>table>columns,当然keyspace也有相对应的层次结构keyspace>column family>column, super column,所以在设计keyspace就像在设计database一样.
Keyspace 的組成
刚刚说过keyspcae就像是database一样,当然也会有schema去描述keyspace,而這份 schema 是在conf/storage-conf.xml里面的<Keyspaces>节点中定义的。
<Keyspaces> <Keyspace Name="Keyspace1"> <KeysCachedFraction>0.01</KeysCachedFraction> <ColumnFamily CompareWith="BytesType" Name="Standard1"/> <ColumnFamily CompareWith="UTF8Type" Name="Standard2"/> <ColumnFamily CompareWith="TimeUUIDType" Name="StandardByUUID1"/> <ColumnFamily ColumnType="Super" CompareWith="UTF8Type" CompareSubcolumnsWith="UTF8Type" Name="Super1" Comment="注解"/> </Keyspace> </Keyspaces>
节点说明
<Keyspaces>
所有的Keyspace定义都要放在Keyspaces标签中.
<Keyspace>
Keyspace定义标签
属性:Name keyspace唯一名称必填
<KeysCachedFraction>
键缓存,默认为0.01,0为关闭。
<ColumnFamily>
定义列簇,就相当于table了.
属性:CompareWith
定义排序规则,规则都包括:BytesType、AsciiType、UTF8Type 、LongType 、LexicalUUIDType、TimeUUIDType
属性:Name
名称 在同一Keyspace里唯一
属性:ColumnType
列类型共两种:Standard和Super
属性:CompareSubcolumnsWith
针对类型为Super的ColumnFamily的排序规则定义
属性:Comment
注解
例:
Contact: { ian: { name: "Ian Wu" phone: "3939889" birthday: "1983/01/01" email: "ianwu@example.com" } john: { name: "John Li" phone: "4499888" birthday: "1984/02/02" email: "johnli@example.com" } }
以上是我们定义的用来存储用户通讯录信息的数据结构.Keyspace定义如下
<Keyspace Name="Phonebook"> <KeysCachedFraction>0.01</KeysCachedFraction> <ColumnFamily CompareWith="UTF8Type" Name="Contact"/> </Keyspace>
是不是很简单,我们可以把Contace看做关系型数据库中的用来存放用户通讯信息的表。Key就是用户姓名,这样我们插入或查找时只需要反问Contact这个ColumnFamily然后操作对应的Key所关联的值就可以了,Key-Value吗~
插入:
cassandra> set Phonebook.Contact['ian']['name']='Ian Wu'
Value inserted.
cassandra> set Phonebook.Contact['ian']['phone']='3939889'
Value inserted.
cassandra> set Phonebook.Contact['ian']['birthday']='1983/01/01'
Value inserted.
cassandra> set Phonebook.Contact['ian']['email']='ianwu@example.com'
Value inserted.
查询:
cassandra> get Phonebook.Contact['ian']
=> (column=phone, value=3939889, timestamp=1270715681771)
=> (column=name, value=Ian Wu, timestamp=1270714451492)
=> (column=email, value=ianwu@example.com, timestamp=1270715719930)
=> (column=birthday, value=1983/01/01, timestamp=1270715700201)
Returned 4 results