您的位置:首页 > 编程语言 > Java开发

java cassandra数据类型对照

2014-10-31 13:07 295 查看


在 Cassandra 的通信契约文件( cassandra.thrift )中定义了 Cassandra 使用的所有数据类型,这些数据类型对应于我们之前讲到的数据模型中的各个 概念,比如 Column 、 ColumnFamily等。我们将分别根据 Java 编程接口讲解每一种数据类型。
 
3.2.1  Column
Column 是 Cassandra 中是最基本的存储单元,用于存储某一行的信息。
Column 在 cassandra.thrift 中的定义如下:
struct Column {
 1 : required binary name,
 2 : required binary value,
 3 : required i64 timestamp,
}
Column 的 name 和 value 的类型都是 byte ,其中 name 用于存储列的名称, value 用于存储列的值, timestamp 用于存储列被更新的时间,类型为 long 。
 
3.2.2  SuperColumn
SuperColumn 是在 Super 类型的 ColumnFamily 中存储数据的单元, SuperColumn 中将包含多个Column 。
SuperColumn 在 cassandra.thrift 中的定义如下:
struct SuperColumn {
 1 : required binary name,
 2 : required list<Column> columns,
}
SuperColumn 中, name 用于存储 SuperColumn 的名称,类型为 byte , columns 是存储Column 的数组。
 
3.2.3  ColumnOrSuperColumn
ColumnOrSuperColumn 在 cassandrathrift 中的定义如下:
struct ColumnOrSuperColumn {
 1 : optional Column column,
 2 : optional SuperColumn super_column,
}
正如名字所描述的那样, ColumnOrSuperColumn 既可以是一个 Column ,也可以是一个SuperColumn 。它的 column 字段和 super_column 中只能一个有值。
由于 Cassandra 所提供的接口中,返回的值可能是 Column 也可能是 SuperColumn ,所以使用ColumnOrSuperColumn 的类型,我们只需要判断究竟是哪个字段有值即可。
 
3.2.4  ColumnParent
ColumnParent 在 cassandra.thrift 中的定义如下:
struct ColumnParent {
 3 : required string column_family,
 4 : optional binary super_column,
}
我们可以将 ColumnParent 理解为文件系统中的一个目录,如果希望查找某一个 key 对应的value 中, ColumnFamily 所有的值,只要指定 column_family 字段就可以了。如果我们希望查找某一个 SuperColumn 的所有值,我们不仅需要指定 column_family 字 段,还需要指定super_column 字段。
 
3.2.5  ColumnPath
ColumnPath 在 cassandra.thrift 中的定义如下:
struct ColumnPath {
 3 : required string column_family,
 4 : optional binary super_column,
 5 : optional binary column,
}
我们可以将 ColumnPath 理解为文件系统中的一个具体文件,如果希望查找某一个 key 对应的value 中某一个 ColumnFamily 的某一个 Column 的值,我们需要指定 column_family 字段和column 字段。如果我们希望查找某一个 SuperColumn 中某一个 Column 的值,我们不仅需要指定column_family 字段和 super_column 字段,还需要指定 column 字段。
 
3.2.6  SliceRange
SliceRange 在 cassandra.thrift 中的定义如下:
struct SliceRange {
 1 : required binary start,
 2 : required binary finish,
 3 : required bool reversed=0,
 4 : required i32 count=100,
}
当我们查询某一个 Key 下面的 Value 的时候,可以通过 SliceRange 来指定需要返回的 Column规则。
其中, start 字段代表按照 ColumnFamily 定义的排序规则需要返回的第一个 Column 名称,finish 字段代表按照 ColumnFamily 定义的排序规则需要返回的最后一个 Column 名称,reversed 字段代表返回的 Column 集合的顺序,如果为 false ,则为顺序返回;如果为 true ,则为逆序返回,默认为顺序返回。最后一个字段 count 代表返回的结果中 Column 的最大个数,默认为 100 个,如果实际的 Column 数量小于 count ,则返回实际的 Column 数量。
假设我们希望返回某一个 Key 下面的所有 Column ,那么将 start 和 finish 都设置为ArrayUtils.EMPTY_BYTE_ARRAY ,将 counter 设置为 Integer.MAX_VALUE 即可。
 
3.2.7  SlicePredicate
SlicePredicate 在 cassandra.thrift 中的定义如下:
struct SlicePredicate {
 1 : optional list<binary> column_names,
 2 : optional SliceRange slice_range,
}
当我们查询某一个 Key 下面的 Value 的时候,可以通过 SlicePredicate 来指定需要返回哪些Column 。
如果希望返回某几个具体的 Column ,那么指定 column_names 字段的值就可以了。如果希望按照某一个规则返回相应的 Column ,那么指定 slice_range 字段就可以了。
 
3.2.8  Deletion
Deletion 在 cassandra.thrift 中的定义如下:
struct Deletion {
 1 : required i64 timestamp,
 2 : optional binary super_column,
 3 : optional SlicePredicate predicate,
}
如果希望在 Cassandra 中删除某一个 Key 中的 Column ,只需要指定 timestamp 字段和predicate 字段即可。如果希望删除 Key 中的 SuperColumn 下的 Column ,不仅需要指定timestamp 字段和 predicate 字段,还需要指定需要删除的 super_column 字段。其中,指定的timestamp 字段为当前的系统时间即可。
 
3.2.9  Mutation
Mutation 在 cassandra.thrift 中的定义如下:
struct Mutation {
 1 : optional ColumnOrSuperColumn column_or_supercolumn,
 2 : optional Deletion deletion,
}
在 Cassandra 中,所有的操作分为两种类型:修改和删除。其中,修改又可以分为插入和修改。我们对 Cassandra 中数据的所有修改都使用 Mutation 来操作。如果是插入新的数据,只需要指定 column_or_supercolumn 字段即可,如果是要修改现有的数据,也是直接指定column_or_supercolumn 字段。删除数据指定 deletion 字段即可。
 
3.2.10  KeyRange
KeyRange 在 cassandra.thrift 中的定义如下:
struct KeyRange {
 1 : optional string start_key,
 2 : optional string end_key,
 3 : optional string start_token,
 4 : optional string end_token,
 5 : required i32 count=100
}
Cassandra 不仅支持按照某一个规则查询 Key 下面的 Column 的值,还能够通过 KeyRange 指定一个规则去查询一批 Key 的值。
KeyRange 提供两种查询方式:按照 Key 查询,在 start_key 和 end_key 字段中指定起始的 Key值即可;按照 token 查询,在 start_token 和 end_token 字段中指定其中的 token 值即可。
这里需要注意的是范围:如果指定 start_key=keyX , end_key=keyX ,那么返回的只有 Key 为keyX 的值;如果指定 start_token=tokenY , end_token=tokenY ,那么会返回所有的 Key 值。
 
3.2.11  KeySlice
KeySlice 在 cassandra.thrift 中的定义如下:
struct KeySlice {
 1 : required string key,
 2 : required list<ColumnOrSuperColumn> columns,
}
我们从 Cassandra 查询出来的结果使用 KeySlice 来保存。在 KeySlice 中,字段 key 用来保存返回结果的 Key 值, columns 字段用来保存这个 Key 下面的 column 的信息。
 
3.2.12  TokenRange
TokenRange 在 cassandra.thrift 中的定义如下:
struct TokenRange {
 1 : required string start_token,
 2 : required string end_token,
 3 : required list<string> endpoints,
}
我们可以根据 Token 在 Cassandra 查询数据。
通过 TokenRange ,我们在 start_token 和 end_token 字段指定开始和结尾的 Token ,并通过endpoints 字段指定需要查询的机器地址即可。
 
3.2.13  AuthenticationRequest
AuthenticationRequest 在 cassandra.thrift 中的定义如下:
struct AuthenticationRequest {
 1 : required map<string,string> credentials,
}
AuthenticationRequest 包含了我们录入 Cassandra 的信息,其中 credentials 字段的 key 为用户名, credentials 字段的 value 为用户密码。
 
3.2.14  ConsistencyLevel
ConsistencyLevel 在 cassandra.thrift 中的定义如下:
enum ConsistencyLevel {
 ZERO=0,
 ONE=1,
 QUORUM=2,
 DCQUORUM=3,
 DCQUORUMSYNC=4,
 ALL=5,
 ANY=6,
}
在 Cassandra 的读取过程中,支持的一致性级别为 ONE 、 QUORUM 和 ALL 。
假设我们的数据备份级别为 3 ,会有以下三种结果:
1 ) 如果读取级别为 ONE ,那么只要读取到 3 份数据中的 1 份数据就会返回结果。
2 ) 如果读取的级别为 QUORUM ,那么需要读取到 3 份数据中的 2 份数据才会返回结果。
3 ) 如果读取的级别为 ALL ,那么需要读取到所有的 3 份数据才会返回结果。
在 Cassandra 的写入过程中,支持的一致性级别为 ZERO 、 ANY 、 ONE 、 QUORUM 和 ALL 。
假设我们的数据备份级别为 3 ,会有以下 5 种结果:
1 ) 如果写入级别为 ZERO ,那么只要 Cassandra 接受到这个写入请求后,就算写入成功,Cassandra 会在后台完成整个写入过程。
2 ) 如果写入级别为 ANY ,只要有任意 1 台 Cassandra 完成了写入操作(包括 hint 写入),就算写入成功。
3 ) 如果写入级别为 ONE ,只要有 1 台负责该数据的 Cassandra 完成了写入操作,就算写入成功。
4 ) 如果写入级别为 QUORUM ,只要有 2 台负责该数据的 Cassandra 完成了写入操作,就算写入成功。
5 ) 如果写入级别为 ALL ,需要 3 台负责该数据的 Cassandra 都完成了写入操作,才能算写入成功。
 
3.2.15  NotFoundException
NotFoundException 在 cassandra.thrift 中的定义如下:
exception NotFoundException {
}
如果在 Cassandra 中查询的值不存在,将抛出这个异常。
 
3.2.16  InvalidRequestException
InvalidRequestException 在 cassandra.thrift 中的定义如下:
exception InvalidRequestException {
 1 : required string why
}
如果我们进行了不可执行的操作,将抛出这个异常。比如,在读取数据的时候,使用的一致性级别为 ConsistencyLevel.ZERO 或者需要查询的数据为 column ,但是使用的查询规则为superColumn 。
 
3.2.17  UnavailableException
UnavailableException 在 cassandra.thrift 中的定义如下:
exception UnavailableException {
}
如果 Cassandra 在写入或者读取的过程中,发现需要操作的节点数少于实际存活的节点数,将抛出这个异常。
比如我们 Cassandra 的数据备份级别为 3 ,选择的读取级别为 QUORUM ,那么要是实际包含这 3份数据的机器中,只有一台在提供服务,其他两台机器无法提供服务,就会抛出UnavailableException 的异常。
 
3.2.18  TimedOutException
TimedOutException 在 cassandra.thrift 中的定义如下:
exception TimedOutException{
}
如果 Cassandra 在写入或者读取的过程中,执行时间超过了 RPC 的时间限制(默认为 30 秒钟),那么将抛出这个异常。
 
3.2.19  AuthenticationException
AuthenticationException 在 cassandra.thrift 中的定义如下:
exception AuthenticationException {
 1 : required string why
}
如果在登入 Cassandra 的过程中,用户名或者密码错误,将抛出这个异常。
 
3.2.20  AuthorizationException
AuthorizationException 在 cassandra.thrift 中的定义如下:
exception AuthorizationException {
 1 : required string why
} 如果在登入 Cassandra 的过程中,指定的 Keyspace 不存在,将抛出这个异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息