Cassandra 使用Thrift API操作数据, 读写多行(range区间)多列(slice切片)数据

来源:互联网 发布:网络乞丐 编辑:程序博客网 时间:2024/06/06 12:30

这次记录的主要是取出多行, slices 值得是列切片, 

取出多行用的是client.get_range_slices 具体代码如下

        Connector conn = new Connector();Cassandra.Client client = conn.connect("Keyspace1");SlicePredicate predicate = new SlicePredicate();List<ByteBuffer> colNames = new ArrayList<ByteBuffer>();colNames.add(UsefulUtils.toByteBuffer("a"));colNames.add(UsefulUtils.toByteBuffer("b"));predicate.column_names = colNames;//我们只区ab 两列值,可以看出来,前面基本差不多ColumnParent parent = new ColumnParent("Standard1");KeyRange keyRange = new KeyRange();//定义一个行键值区间,这里是主要区别keyRange.start_key = UsefulUtils.toByteBuffer("k1");keyRange.end_key = UsefulUtils.toByteBuffer("k2");//跟列一样,键值也是有顺序存储在硬盘/内存 中的,所以说,要指定一个开始键值,结束键值,你就会得到一串连续的键值// get a group keysliceList<KeySlice> results = client.get_range_slices(parent, predicate,keyRange, CL);//然后调用get_range_slices, 可以得到包含很多结果keyslice 的LIST


得到这个list之后,就可以遍历这个list 按照不同的键值,取出对应的columns, 以前我们取出的都是一行,只有一个key

这次我们取了好几行,每行只有a, b 两列/ 当然,你也可以结合取出一个slice的列


for (KeySlice keySlice : results) {List<ColumnOrSuperColumn> cosc = keySlice.getColumns();System.out.println("Current row:" + new String(keySlice.getKey()));for(ColumnOrSuperColumn cc: cosc){Column c=cc.getColumn();UsefulUtils.formatKeyValueOutPut(c.name, c.value);}

上面是遍历语法



这篇文章记录了 用Keyrange 指定一组rowkey来得到多行数据




原创粉丝点击