大家好,欢迎来到IT知识分享网。
简介:
cassandra(开源分布式NoSQL数据库系统),是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。
Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra集群来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。
这里有很多理由来选择Cassandra用于您的网站。和其他数据库比较,有如下特点:
模式灵活:使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部署上。
可扩展性:Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。
多数据中心:你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。
范围查询:如果你不喜欢全部的键值查询,则可以设置键的范围来查询。
列表数据结构:在混合模式可以将超级列添加到5维。对于每个用户的索引,这是非常方便的。
分布式写操作:有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。
1.Java与Cassandra交互常用的类:
1.1.Cluster类,控制节点,操作集群,有四种重试策略和两种重连策略。
1.2.Session类,两种CQL查询模式
1.3.ResultSet和ResultSetFuture执行结果
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