Java操作Cassandra数据库及CQL使用方法[通俗易懂]

Java操作Cassandra数据库及CQL使用方法[通俗易懂]简介:cassandra(开源分布式NoSQL数据库系统),是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与AmazonDynamo的完全分布式的架构于一身Facebook于2008将Cassandra开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web2.0…

大家好,欢迎来到IT知识分享网。

简介:

cassandra(开源分布式NoSQL数据库系统),是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被DiggTwitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。

Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra集群来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。

这里有很多理由来选择Cassandra用于您的网站。和其他数据库比较,有如下特点:

模式灵活:使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部署上。

可扩展性:Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。

多数据中心:你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。

一些使Cassandra提高竞争力的其他功能:

范围查询:如果你不喜欢全部的键值查询,则可以设置键的范围来查询。

列表数据结构:在混合模式可以将超级列添加到5维。对于每个用户的索引,这是非常方便的。

分布式写操作:有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。

1.Java与Cassandra交互常用的类:

Java操作Cassandra数据库及CQL使用方法[通俗易懂]

1.1.Cluster类,控制节点,操作集群,有四种重试策略和两种重连策略。

Java操作Cassandra数据库及CQL使用方法[通俗易懂]

Java操作Cassandra数据库及CQL使用方法[通俗易懂]

1.2.Session类,两种CQL查询模式

Java操作Cassandra数据库及CQL使用方法[通俗易懂]

1.3.ResultSet和ResultSetFuture执行结果

Java操作Cassandra数据库及CQL使用方法[通俗易懂]

2.Java操作Cassandra数据库Demo

2.1.第一个Demo,查看Cassandra的元数据信息及当前所有的健空间。

package www.lxk.com;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.KeyspaceMetadata;
import com.datastax.driver.core.Metadata;

public class FirstSDemo {

	public static void main(String[] args) {

		Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1")
                         .withCredentials("lxk", "Huawei@123").build();
		Metadata metadata = cluster.getMetadata();
		
		for (Host host : metadata.getAllHosts()) {
			System.out.println("===>" + host.getAddress());
		}
		
		System.out.println("-------------------");
		
		for (KeyspaceMetadata keyspaceMetadata : metadata.getKeyspaces()) {
			System.out.println("===>" + keyspaceMetadata.getName());
		}
	}
}
<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
	<version>3.6.0</version>
</dependency>

2.2.第二个Demo,最直接的方式CQL语句,对数据CRUD

package www.lxk.com;

import java.util.List;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;

public class SecondDemo {
	public static void main(String[] args) {
		Cluster cluster = null;
		Session session = null;

		try {
			// 定义一个cluster类
			cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
			// 获取session对象
			session = cluster.connect();
			// 创建键空间
			String createKeySpaceCQL = "create keyspace if not exists mykeyspace01 with replication={'class':'SimpleStrategy','replication_factor':1}";
			session.execute(createKeySpaceCQL);
			// 创建列族
			String createTableCQL = "create table if not exists mykeyspace01.student(name varchar primary key,age int)";
			session.execute(createTableCQL);
			
			// 插入数据
			String insertCQL = "insert into mykeyspace01.student(name,age) values('lxk',25)";
			session.execute(insertCQL);
			// 查询数据
			query01(session);
			
			// 修改数据
			String updateCQL="update mykeyspace01.student set age=30 where name='lxk'";
			session.execute(updateCQL);
			query01(session);

			// 删除数据
			String deleteCQL="delete from mykeyspace01.student where name='lxk'";
			session.execute(deleteCQL);
			query01(session);

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			session.close();
			cluster.close();
		}
	}

	private static void query01(Session session) {
		System.out.println("开始查询--------------------------");
		String queryCQL = "select * from mykeyspace01.student";
		ResultSet rs = session.execute(queryCQL);
		List<Row> dataList = rs.all();
		for (Row row : dataList) {
			System.out.println("==>name:"+row.getString("name"));
			System.out.println("==>age:"+row.getInt("age"));
		}
		System.out.println("结束查询--------------------------");
	}

}

 

2.3.第三个Demo,使用QueryBuilder类操作,对数据CRUD

package www.lxk.com;

import java.util.List;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.querybuilder.Insert;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select.Where;

public class ThirdDemo {
	public static void main(String[] args) {
		Cluster cluster = null;
		Session session = null;

		try {
			// 定义一个cluster类
			cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
			// 获取session对象
			session = cluster.connect();
			/*
			 * // 创建键空间 String createKeySpaceCQL =
			 * "create keyspace if not exists mykeyspace01 with replication={'class':'SimpleStrategy','replication_factor':1}"
			 * ; session.execute(createKeySpaceCQL); // 创建列族 String
			 * createTableCQL =
			 * "create table if not exists mykeyspace01.student(name varchar primary key,age int)"
			 * ; session.execute(createTableCQL);
			 */

			// 插入数据
			Insert insert = QueryBuilder.insertInto("mykeyspace01", "student").value("name", "zhangsan").value("age", 20);
			System.out.println(insert);
			session.execute(insert);
			// 查询数据
			query02(session);

			// 修改数据
			com.datastax.driver.core.querybuilder.Update.Where update = QueryBuilder.update("mykeyspace01", "student")
					.with(QueryBuilder.set("age", 32)).where(QueryBuilder.eq("name", "zhangsan"));
			System.out.println(update);
			session.execute(update);
			query02(session);

			// 删除数据
			com.datastax.driver.core.querybuilder.Delete.Where delete = QueryBuilder.delete()
					.from("mykeyspace01", "student").where(QueryBuilder.eq("name", "zhangsan"));
			System.out.println(delete);
			session.execute(delete);
			query02(session);

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			session.close();
			cluster.close();
		}
	}

	private static void query02(Session session) {
		System.out.println("开始查询--------------------------");
		Where query = QueryBuilder.select().all().from("mykeyspace01", "student")
				.where(QueryBuilder.eq("name", "zhangsan"));
		System.out.println(query);
		ResultSet rs = session.execute(query);
		List<Row> dataList = rs.all();
		for (Row row : dataList) {
			System.out.println("==>name:" + row.getString("name"));
			System.out.println("==>age:" + row.getInt("age"));
		}
		System.out.println("结束查询--------------------------");
	}

}

2.4.第三个Demo,使用QueryBuilder类操作,同时使用PrepareStatement对数据CRUD

package www.lxk.com;

import java.util.List;

import com.datastax.driver.core.BoundStatement;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;

public class FourthDemo {
	public static void main(String[] args) {
		Cluster cluster = null;
		Session session = null;

		try {
			// 定义一个cluster类
			cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
			// 获取session对象
			session = cluster.connect();
			/*
			 * // 创建键空间 String createKeySpaceCQL =
			 * "create keyspace if not exists mykeyspace01 with replication={'class':'SimpleStrategy','replication_factor':1}"
			 * ; session.execute(createKeySpaceCQL); // 创建列族 String
			 * createTableCQL =
			 * "create table if not exists mykeyspace01.student(name varchar primary key,age int)"
			 * ; session.execute(createTableCQL);
			 */

			// 插入数据
			PreparedStatement insertStatement = session.prepare("insert into mykeyspace01.student(name,age) values(?, ?)");
			BoundStatement bind = insertStatement.bind("lisi", 27);
			session.execute(bind);
			// 查询数据
			query03(session);

			// 修改数据
			PreparedStatement updateStatement = session.prepare("update mykeyspace01.student set age=? where name=?");
			session.execute(updateStatement.bind(28,"lisi"));
			query03(session);

			// 删除数据
			PreparedStatement dellteStatement = session.prepare("delete from mykeyspace01.student where name=?");
			session.execute(dellteStatement.bind("lisi"));
			query03(session);

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			session.close();
			cluster.close();
		}
	}

	private static void query03(Session session) {
		System.out.println("开始查询--------------------------");
		PreparedStatement statement = session.prepare("select * from mykeyspace01.student where name=?");
		BoundStatement bind = statement.bind("lisi");
		ResultSet rs = session.execute(bind);
		
		List<Row> dataList = rs.all();
		for (Row row : dataList) {
			System.out.println("==>name:" + row.getString("name"));
			System.out.println("==>age:" + row.getInt("age"));
		}
		System.out.println("结束查询--------------------------");
	}

}

CQL命令参考:https://www.w3cschool.cn/cassandra/

 

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24249.html

(0)
上一篇 2023-08-26 21:33
下一篇 2023-08-27 11:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信