欢迎投稿

今日深度:

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

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


这次记录的主要是取出多行, 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 keyslice
		List<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来得到多行数据




www.htsjk.Com true http://www.htsjk.com/cassandra/34800.html NewsArticle Cassandra 使用Thrift API操作数据, 读写多行(range区间)多列(slice切片)数据, 这次记录的主要是取出多行, slices 值得是列切片,  取出多行用的是client.get_range_slices 具体代码如下 Connector conn...
相关文章
    暂无相关文章
评论暂时关闭