`

cassandra使用之添加更新和删除

 
阅读更多
import java.nio.ByteBuffer;

import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.ColumnOrSuperColumn;
import org.apache.cassandra.thrift.ColumnParent;
import org.apache.cassandra.thrift.ColumnPath;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
import org.apache.cassandra.thrift.NotFoundException;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

public class CassandraTest {
	static Cassandra.Client cassandraClient;
	static TTransport socket;

	private static void init(String keySpace) throws InvalidRequestException, TException {
		String server = "192.168.100.108";
		int port = 9160;
		/* 首先指定的地址 */
		socket = new TSocket(server, port);
		System.out.println(" connected to " + server + ":" + port + ".");
		TFramedTransport transport = new TFramedTransport(socket);
		/* 指定通信协议为二进制流协议 */
		TBinaryProtocol binaryProtocol = new TBinaryProtocol(transport);
		cassandraClient = new Cassandra.Client(binaryProtocol);
		/* 建立通信连接 */
		socket.open();
		cassandraClient.set_keyspace(keySpace);
	}

	public static void main(String[] args) throws TException, TimedOutException,
			InvalidRequestException, UnavailableException, NotFoundException {
		/* 选择需要操作的,可以理解成数据库 */
		String keyspace = "wyqTest";

		/* 初始化连接 */
		init(keyspace);

		/* 创建一个表名*/
		String columnFamily = "userprofile";
		//KEY的名字
		String tablename = "myinfo";

		/* 插入一条记录 */
		insertOrUpdate(columnFamily, tablename, "fengye", "枫叶", System.currentTimeMillis());
		/* 删除一条记录 */
		//delete(columnFamily,tablename,"fengye",System.currentTimeMillis());
		/* 获取一条记录 (由于插入和删除是同一条记录,有可能会检索不到哦!请大家主意! */
		Column column = getByColumn(columnFamily, tablename, "fengye", System.currentTimeMillis());

		System.out.println("read Table " + columnFamily);
		System.out.println("read column name " + ":" + toString(column.name));
		System.out.println("read column value" + ":" + toString(column.value));
		System.out.println("read column timestamp" + ":" + (column.timestamp));
		close();
	}

	/**
	 * 插入记录
	 */
	public static void insertOrUpdate(	String columnFamily,
										String tableName,
										String ColumnName,
										String ColumnValue,
										long timeStamp) throws TException, TimedOutException,
			InvalidRequestException, UnavailableException, NotFoundException {
		/* 创建一个column path */
		ColumnParent parent = new ColumnParent(columnFamily);
		Column col = new Column(CassandraTest.toByteBuffer(ColumnName));
		col.setValue(CassandraTest.toByteBuffer(ColumnValue));
		col.setTimestamp(System.currentTimeMillis());
		try{
			/*
			 * 执行插入操作,指定keysapce, row, col, 和数据内容, 后面两个参数一个是timestamp,
			 * 另外一个是consistency_level timestamp是用来做数据一致性保证的,
			 * 而consistency_level是用来控制数据分布的策略,前者的理论依据是bigtable, 后者的理论依据是dynamo
			 */
			cassandraClient.insert(	CassandraTest.toByteBuffer(tableName),
									parent,
									col,
									ConsistencyLevel.ONE);
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	/**
	 * 删除记录
	 */
	public static void delete(	String columnFamily,
								String tablename,
								String ColumnName,
								long timeStamp) throws TException, TimedOutException,
			InvalidRequestException, UnavailableException, NotFoundException {
		/* 选择需要操作的Keyspaces, 存放数据表所在的空间位置 */
		/* 数据所在的行标 */
		/* 创建一个column path */
		ColumnPath col = new ColumnPath(columnFamily);
		col.setColumn(CassandraTest.toByteBuffer(ColumnName));
		try{
			/*
			 * 执行删除操作,指定keysapce, row, col, 后面两个参数一个是timestamp,
			 * 另外一个是consistency_level timestamp是用来做数据一致性保证的,
			 * 而consistency_level是用来控制数据分布的策略,前者的理论依据是bigtable, 后者的理论依据是dynamo
			 */
			cassandraClient.remove(	CassandraTest.toByteBuffer(tablename),
									col,
									System.currentTimeMillis(),
									ConsistencyLevel.ONE);
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	/**
	 * 获取数据
	 */
	public static Column getByColumn(	String columnFamily,
										String tablename,
										String ColumnName,
										long timeStamp) throws TException, TimedOutException,
			InvalidRequestException, UnavailableException, NotFoundException {
		try{
			/*
			 * 执行查询操作,指定keysapce, row, col, timestamp timestamp是用来做数据一致性保证的,
			 * 而consistency_level是用来控制数据分布的策略,前者的理论依据是bigtable, 后者的理论依据是dynamo
			 */
			/* 创建一个columnFamily */
			ColumnPath col = new ColumnPath(columnFamily);
			col.setColumn(CassandraTest.toByteBuffer(ColumnName));
			System.out.println(tablename);
			System.out.println(ColumnName);
			System.out.println(cassandraClient.get(toByteBuffer(tablename), col, ConsistencyLevel.ONE));
			ColumnOrSuperColumn superColumn = cassandraClient.get(	CassandraTest.toByteBuffer(tablename),
																	col,
																	ConsistencyLevel.ONE);
			System.out.println(">>>>>>>>>>>>>>>>" + superColumn);
	
			Column column = cassandraClient.get(CassandraTest.toByteBuffer(tablename),
												col,
												ConsistencyLevel.ONE).column;
			return column;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 关闭当前的远程访问连接
	 */
	public static void close() {
		socket.close();
	}
	
	//转这Byte
    public static ByteBuffer toByteBuffer(String value)
    {
    	try{
    		return ByteBuffer.wrap(value.getBytes("UTF-8"));
    	}catch(Exception e){
    		e.printStackTrace();
    		return null;
    	}
    }
    //得到字符串
    public static String toString(ByteBuffer buffer)
    {
    	try{
	        byte[] bytes = new byte[buffer.remaining()];
	        buffer.get(bytes);
	        return new String(bytes, "UTF-8");
    	}catch(Exception e){
    		e.printStackTrace();
    		return null;
    	}
    }
}

 

0
0
分享到:
评论

相关推荐

    cassandra添加删除操作代码

    nosql 操作,cassandra添加删除操作代码

    Cassandra节点管理

    Cassandra节点管理:添加,删除,移动,恢复节点

    RUBBoS-Cassandra:RUBBoS 的 Cassandra 实现

    添加 Datastax 存储库密钥: curl -L | sudo apt-key 添加 - apt-get 更新 安装 Python 驱动程序: apt-get 安装 python-cql 安装卡桑德拉: apt-get 安装 Cassandra 删除测试数据库: 服务卡桑德拉站bash -c 'rm...

    helenos:Helenos是一个基于Web的免费环境,可使用Apache Cassandra数据库简化数据探索和架构管理

    海伦诺斯介绍Helenos是一个基于Web的免费环境,可使用Apache Cassandra数据库简化数据探索和架构管理。功能清单探索模式查看键空间和列族的属性添加/删除/截断列族添加/删除键空间通过以下方式浏览数据: keyRange ...

    cassandro:用于 Apache Cassandra 的 Ruby ORM

    Cassandro 使用新的安装gem install cassandro 变更日志v2.1.0 尝试在没有连接的情况下与 Cassandra 交互时Cassandra::Errors::ClientError异常SoftDelete 更新:重构where , count和query方法以默认排除已删除的...

    delta-enabled-crdts:提供所有突变增量的基于状态的CRDT的参考实现

    AWORSet:一种添加获胜的优化观察删除集,允许添加和删除 RWORSet:一种删除赢得优化的观察删除集,允许添加和删除 MVRegister:一种优化的多值寄存器(新的未发布数据类型) EWFlag:标记为启用/禁用。 赢得胜利...

    rom-cassandra

    删除此内容和上面的文字,并描述您的宝石安装将此行添加到您的应用程序的Gemfile中: gem 'rom-cassandra' 然后执行: $ bundle或将其自己安装为: $ gem install rom-cassandra用法待办事项:在此处写下使用说明...

    ruby-on-rails-cassandra:Ruby on Rails与Cassandra

    Ruby on Rails与Cassandra 您可以在Cassandra的帮助下轻松创建Rails项目。 在Mac上安装Cassandra brew install python ...从您的Gemfile中删除sqlite3(如果存在),将以下gems添加到您的Gemfile中,然后运

    movieApp:使用JAX-RS,Backbone.js和Cassandra以Java实现的RESTful应用程序

    它允许您浏览电影列表,可以在其中添加,更新和删除电影以及基于流派的搜索。 科技类 该应用程序使用许多开源项目来正常工作: Backbone.js Underscore.js jQuery的 卡桑德拉 Gradle 该应用程序对所有CRUD操作都...

    erlcass:基于DataStax cpp-driver的高性能Erlang Cassandra驱动程序

    一些集群配置已删除,而其他配置已添加。 有关更多信息,请参见 。 这个新版本增加了对推测执行的支持:对于某些应用程序,最大程度地减少延迟是至关重要的。 推测执行是一种通过针对不同节点抢先执行同一查询的多...

    ScyllaDB数据库-其他

    在常规生产负载的时候可以添加和删除节点。 Scylla 背后的设计和开发团队成员来自于 KVM 虚拟化管理器 —— Avi Kivity, Dor Laor, Benny Schnaider 和 OSS 老成员。KVM 现在是大部分云计算环境(包括 Google ...

    session-bench

    会话平台Session Bench是使用JMeter测试Couchbase和Cassandra的工具。 测试场景: 如果不存在,则创建会话循环直到达到MAXBYTES : 读取会话数据生成ADDBYTES大小的随机ascii字符串写入会话数据睡1s 达到MAXBYTES后...

    myStock:java播放示例应用程序

    Java Play库存和库存管理系统,该系统使用Cassandra数据库。 为什么? 使用Java Play框架练习和提高我的技能。 托多斯 添加带有侧边栏导航的主页 添加功能以添加和删除库存 登录和注册完全正常,并与数据库集成。

    kai:Erlang KairosDB 客户端

    凯 Erlang 客户端 :warning: 在制品。 暂时不要使用。...kairos-cassandra 的 ELB 友好保持活动REST API(添加数据点没有计划,在这个客户端的范围内没有充分的理由去做) 自定义响应包装器 删除数据点 删除指标

    freeradius-server:FreeRADIUS-多协议策略服务器

    使用RADIUS可以集中化对网络的身份验证和授权,并最大程度地减少了在向网络中添加或删除新用户时必须进行的更改次数。 FreeRADIUS可以在802.1x(WiFi),拨号,PPPoE,VPN,VoIP等系统上对用户进行身份验证。 它...

    java8看不到源码-relumin:Redis集群管理工具

    运营集群添加节点、重新分片、删除节点、复制、故障转移...等 将 Redis 节点指标可视化为图表指标是通过 警报您可以自由设置阈值。 为什么要发展? 有一些 redis 工具,但它们不支持 Redis 集群。 很难理解集群状态...

Global site tag (gtag.js) - Google Analytics