`

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
分享到:
评论

相关推荐

    spring boot与cassandra集成,使用JPA方式。

    现在,你可以通过这个接口进行数据的查询、保存、更新和删除。例如,添加一个新的用户: ```java @Autowired private UserRepository userRepository; public void addUser(User user) { userRepository.save...

    java NoSql Cassandra hector

    Hector提供了对Cassandra的各种操作,包括CRUD(创建、读取、更新和删除)操作,以及更复杂的查询和索引管理。 Hector的使用步骤: 1. 添加依赖:首先,要在项目中引入Hector库的依赖。通常,这可以通过Maven或...

    cassandra-operator,apache-cassandra的kubernetes算子.zip

    持续的维护和更新确保了其与Kubernetes及Cassandra的兼容性。 7. **最佳实践**: 在实际使用中,了解如何优化Cassandra配置、监控集群健康状况以及合理规划存储和网络资源是至关重要的。Cassandra-Operator的文档...

    Cassandra文档

    通过深入学习Cassandra文档,开发者和管理员能够掌握如何高效地使用和管理这个强大的分布式数据库系统,满足大数据场景下的复杂需求。无论是构建大规模的数据仓库还是实时分析应用,Cassandra都提供了坚实的基础。

    Cassandra JDBC Driver

    Cassandra JDBC Driver支持CQL语法,开发者可以通过执行CQL语句来进行数据查询、插入、更新和删除等操作。 4. **性能优化**:Cassandra JDBC Driver在设计时考虑了性能因素,它能够高效地处理大量的数据请求,减少...

    Cassandra的数据模型介绍

    amily 是 Cassandra 数据模型的核心组成部分,用来组织和管理 Column 和 SuperColumn。...尽管在理解和使用上可能需要一些学习曲线,但 Cassandra 的这些特性使其成为大数据领域中的一个重要选择。

    Cassandra1.2

    Cassandra 的设计使得它可以轻松地添加或删除节点,无需停机。在Cassandra 1.2 中,这一特性得到了进一步增强,使得扩展更加平滑,适合大规模数据存储。 ### 6. Compaction 策略 Cassandra 1.2 对数据压缩策略进行...

    Laravel开发-cassandra

    同时,使用Cassandra的分片和复制策略可以提高系统的容错性和读写性能。 总结,Laravel结合Cassandra可以构建高性能、可扩展的Web应用。通过使用Eloquent模型和查询构建器,开发者能够以更熟悉的Laravel方式处理...

    cassandra-C#应用

    2. **一致性哈希**:Cassandra使用一致性哈希来分布数据,这使得添加或删除节点时对整体性能的影响最小。 3. **列族模型**:不同于传统的行存储,Cassandra采用列族(Column Family)模型,允许灵活的数据结构,...

    Cassandra数据库

    11. **Compaction策略**:Cassandra提供了多种数据压缩策略,如SizeTieredCompactionStrategy (STCS) 和LeveledCompactionStrategy (LCS),用于优化磁盘空间使用和读写性能。 12. **Apache Cassandra社区**:由于其...

    apache-cassandra-3.11.13

    这种架构使得Cassandra能够支持水平扩展,只需添加更多的节点就能增加存储容量和处理能力。 2. **一致性与可用性**:Cassandra 使用了最终一致性的模型,允许用户在一致性和可用性之间进行权衡。在3.11.13版本中,...

    Cassandra权威指南【中文版】

    CQL支持创建、修改和删除表,以及插入、更新和查询数据。掌握CQL是使用Cassandra进行数据操作的关键。 此外,书中还会涉及Cassandra的集群配置和运维,包括节点添加和移除、数据迁移、监控和性能调优等。这些内容...

    Cassandra的基础应用

    - 为了验证环境变量是否正确配置,需要重新打开一个新的命令提示符窗口,并在其中执行`echo %JAVA_HOME%`和`echo %CASSANDRA_HOME%`命令。如果这些命令能够正确输出相应的路径,那么就说明环境变量配置成功。 **2....

    基于Cassandra的实时气象数据分布式存储系统.pdf

    该结构使得每个节点功能完全相同,可以灵活地添加节点来完成系统的扩展或删除节点,而不需要大规模转移数据。同时,系统彻底避免了系统因单点故障导致的不稳定性。 1.1 系统架构 Cassandra的系统架构基于P2P环形...

    apache-cassandra-3.7

    这种架构可以轻松地添加或删除节点,以应对不断变化的数据量和流量需求。 2. **一致性与可用性**:Cassandra 支持多副本策略,可以配置不同的一致性级别(如 QUORUM、ONE、ALL 等),以平衡读写速度和数据一致性。...

    Practical Cassandra-带完整书签目录超清文字版.pdf

    2. **一致性哈希**:Cassandra使用一致性哈希来分配数据到不同的节点,这有助于在添加或删除节点时保持数据分布的均匀性,避免大规模的数据迁移。 3. **Gossip协议**:节点间的通信依赖于Gossip协议,这是一种去...

    cassandra cql3

    以上是 Cassandra CQL3 的核心知识点概览,涵盖了数据模型的设计、CQL 的基本使用、数据的插入和更新、查询操作以及表和索引的管理等方面。掌握这些内容对于有效利用 Cassandra 来构建高性能的应用程序至关重要。

    Cassandra分布式架构与源代码分析

    Cassandra的schema可以随时更改,不需要提前设计schema,可以随时添加或删除字段。 1.2 支持range查询 Cassandra支持range查询,可以对Key进行范围查询。 1.3 高可用 Cassandra是高可用的,单点故障不影响集群...

Global site tag (gtag.js) - Google Analytics