本文主要关注两个部分,
1. 怎么写一个最简单cassandra的sample
2. 通过代码,了解cassandra的数据模型及隐藏在后面的交互逻辑
步骤一:
首先我们创建一个工程,然后将cassandra/lib目录下的包,导入到我们的工程中。
步骤二:
创建一个类,内容如下:
import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.Column;
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.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
public class SampleOne {
static Cassandra.Client cassandraClient;
static TTransport socket;
private static void init() throws TTransportException {
String server = "192.168.1.129";
// String server = "localhost";
int port = 9160;
/* 首先指定cassandra server的地址 */
socket = new TSocket(server, port);
System.out.println(" connected to " + server + ":" + port + ".");
/* 指定通信协议为二进制流协议 */
TBinaryProtocol binaryProtocol = new TBinaryProtocol(socket, false, false);
cassandraClient = new Cassandra.Client(binaryProtocol);
/* 建立通信连接 */
socket.open();
}
public static void main(String[] args) throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException {
/* 初始化连接 */
init();
/* 选择需要操作的Keyspaces, 可以理解成数据库的表 */
String keyspace= "Keyspace1";
String row = "employee";
/* 创建一个Table Name */
String tableName = "Standard2";
/* 插入一条记录 */
insertOrUpdate(keyspace,tableName,row,"name","happy birthday!",System.currentTimeMillis());
/* 删除一条记录 */
//delete(keyspace,tableName,row,"name",System.currentTimeMillis());
/* 获取一条记录 (由于插入和删除是同一条记录,有可能会检索不到哦!请大家主意!*/
Column column = getByColumn(keyspace,tableName,row,"name", System.currentTimeMillis());
System.out.println("read row " + row);
System.out.println("column name " + ":" + new String(column.name));
System.out.println("column value" + ":" + new String(column.value));
System.out.println("column timestamp" + ":" + (column.timestamp));
close();
}
/**
* 插入记录
*/
public static void insertOrUpdate(String tableSpace,String tableName, String rowParam,String ColumnName,String ColumnValue,long timeStamp)
throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException{
/* 选择需要操作的Keyspaces, 存放数据表所在的空间位置 */
String keyspace= tableSpace;
/* 数据所在的行标 */
String row = rowParam;
/* 创建一个column path */
ColumnPath col = new ColumnPath(tableName);
col.setColumn(ColumnName.getBytes());
/* 执行插入操作,指定keysapce, row, col, 和数据内容, 后面两个参数一个是timestamp, 另外一个是consistency_level
* timestamp是用来做数据一致性保证的, 而consistency_level是用来控制数据分布的策略,前者的理论依据是bigtable, 后者的理论依据是dynamo
*/
cassandraClient.insert(keyspace, row, col,"i don't know".getBytes(), System.currentTimeMillis(), ConsistencyLevel.ONE);
}
/**
* 删除记录
*/
public static void delete(String tableSpace,String tableName, String rowParam,String ColumnName,long timeStamp)
throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException{
/* 选择需要操作的Keyspaces, 存放数据表所在的空间位置 */
String keyspace= tableSpace;
/* 数据所在的行标 */
String row = rowParam;
/* 创建一个column path */
ColumnPath col = new ColumnPath(tableName);
col.setColumn(ColumnName.getBytes());
/* 执行删除操作,指定keysapce, row, col, 后面两个参数一个是timestamp, 另外一个是consistency_level
* timestamp是用来做数据一致性保证的, 而consistency_level是用来控制数据分布的策略,前者的理论依据是bigtable, 后者的理论依据是dynamo
*/
cassandraClient.remove(keyspace, row, col, System.currentTimeMillis(), ConsistencyLevel.ONE);
}
/**
* 获取数据
*/
public static Column getByColumn(String tableSpace,String tableName, String rowParam,String ColumnName,long timeStamp)
throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException{
/* 选择需要操作的Keyspaces, 存放数据表所在的空间位置 */
String keyspace= tableSpace;
/* 数据所在的行标 */
String row = rowParam;
/* 创建一个column path */
ColumnPath col = new ColumnPath(tableName);
col.setColumn(ColumnName.getBytes());
/* 执行查询操作,指定keysapce, row, col, timestamp
* timestamp是用来做数据一致性保证的, 而consistency_level是用来控制数据分布的策略,前者的理论依据是bigtable, 后者的理论依据是dynamo
*/
Column column = cassandraClient.get(keyspace, row, col, ConsistencyLevel.ONE).column;
return column;
}
/**
* 关闭当前的远程访问连接
*/
public static void close() {
socket.close();
}
}
为了比较好的理解这些名词解释,我们先看看cassandra的数据模型:
Cassandra 的数据模型的基本概念:
keyspace:
用于存放 ColumnFamily 的容器,相当于关系数据库中的 Schema 或 database,
ColumnFamily :
用于存放 Column 的容器,类似关系数据库中的 table 的概念。
SuperColumn :
它是一个特列殊的 Column, 它的 Value 值可以包函多个 Column
{ // 这是一个SuperColumn
name: "李明杰",
// 包含一系列的Columns
value: {
street: {name: "street", value: "1234 x street", timestamp: 123456789},
city: {name: "city", value: "san francisco", timestamp: 123456789},
zip: {name: "zip", value: "94107", timestamp: 123456789},
}
}
Columns:
Cassandra 的最基本单位。由 name , value , timestamp 组成
{ // 这是一个column
name: "李明杰",
value: "mydream.limj@gmali.com",
timestamp: 123456789
}
cassandra的数据模型主要就是由上述几种模型构建而成的,很简单吧,的确是这样,最大的好处就是读写数据的API非常简单.
- 大小: 11.5 KB
分享到:
相关推荐
Java分布式事务是大型分布式系统中不可或缺的一个重要组成部分,它确保在多个网络节点间的数据操作能够保持一致性和完整性。在分布式环境中,由于多个服务之间可能存在数据交互,因此需要一种机制来处理跨服务的数据...
Java分布式应用学习笔记 在Java世界中,分布式应用是指由多个独立组件通过网络通信协同工作的系统。这种架构模式常用于构建大规模、高可用性、可扩展的系统。本笔记将深入探讨Java分布式应用的核心概念、技术和实践...
【标题】"Kundera-Cassandra-Pelops-2.12.zip" 是一个与Apache Cassandra数据库相关的开源项目,Kundera是一个对象关系映射(ORM)框架,专为分布式NoSQL数据库设计,特别是针对Cassandra。这个版本2.12的Kundera包含...
在本项目"Java数据库系统项目开发实践代码大全之2"中,我们主要关注的是使用Java语言进行数据库系统的开发和实践。这个项目包含了多个章节的源代码,分别对应不同的主题和功能,包括第4章、第5章、第6章、第7章、第8...
11. **NoSQL数据库**:随着大数据和分布式系统的发展,NoSQL数据库(如MongoDB、Cassandra、Redis等)的使用也越来越广泛。Java也有相应的API来支持这些非关系型数据库。 学习“Java技能百练--数据库篇”将有助于你...
7. **数据库复制与集群**:理解主从复制、多主复制、分片等技术,以及如何通过分布式数据库解决高并发和高可用性问题。 8. **NoSQL数据库**:随着大数据和实时分析的需求,NoSQL数据库(如MongoDB、Cassandra、...
最后,可能会涉及到Java与NoSQL数据库的集成,如MongoDB、Cassandra等。这些非关系型数据库在大数据处理、高并发场景下有独特优势,Java提供了诸如Jongo、Morphia等库来简化与NoSQL数据库的交互。 总结起来,这份...
Cassandra是一个开源的NoSQL分布式数据库系统,而Java Driver是用于在Java应用与Cassandra数据库之间进行通信的客户端库。这份文档详细介绍了如何通过Java操作Cassandra,包括新增、删除、修改、查询数据等操作,...
最后,随着NoSQL数据库的兴起,书中可能还会包含MongoDB、Cassandra等非关系型数据库的Java操作,以及如何在Java中实现分布式数据库的解决方案。 综上所述,《Java数据库编程宝典》是一本全面讲解Java数据库编程的...
在分布式数据库方面,Cassandra、MongoDB和Riak等NoSQL数据库提供了良好的水平扩展能力,适合大数据场景。Python有对应的驱动程序,如cassandra-driver、pymongo和riak-py,便于与这些数据库进行交互。而对于关系型...
它以其高性能和可扩展性著称,其背后的核心存储机制是Apache Cassandra,这是一款分布式NoSQL数据库系统,确保了数据的高可用性和水平扩展能力。 KairosDB的优势在于其灵活性和定制化能力。由于它建立在Cassandra之...
分布式数据库如Cassandra、HBase等,以及微服务架构下的数据存储和访问策略也是现代Java数据库编程需要关注的领域。 以上内容仅是对"基于Java数据库编程及其应用分析"主题的初步概述,具体PDF文档可能会深入讨论每...
"Java部分数据库课件"可能涵盖了一系列主题,旨在帮助学习者理解和掌握如何使用Java与各种数据库进行交互。下面将详细讨论这些相关知识点。 1. JDBC(Java Database Connectivity):JDBC是Java平台的标准API,用于...
在本文中,我们将深入探讨如何将Spring Boot框架与Cassandra数据库集成,并利用其原生驱动进行数据操作。Spring Boot以其简化配置和快速启动的特点,深受开发者喜爱,而Cassandra作为分布式NoSQL数据库,广泛用于...
Apache Cassandra是一个开源的、分布式的NoSQL数据库管理系统,以其高性能、可扩展性和高可靠性而受到广泛关注。随着数据量的不断增加和对数据处理速度要求的提升,Cassandra在大数据存储和分析方面占据着重要位置。...
- 分布式数据库概念:理解分布式数据库的架构和原理,如CAP定理和BASE原则。 - 数据分片与复制:掌握数据分片策略和数据复制技术(如主从复制、多活架构)。 6. **云数据库服务**: - 云数据库产品:了解主流云...
而非关系型数据库(如MongoDB、Cassandra、Redis)则采用不同的数据模型,如文档型、键值对、图形或列族,适合处理大规模、分布式和实时的数据。 在学习数据库时,理解SQL(Structured Query Language)至关重要。...
2. **遵循 JDBC 规范**:该驱动程序按照 JDBC(Java Database Connectivity)规范设计,提供了一个标准化的接口,使得开发人员能够在不深入了解 Cassandra 本身的底层机制的情况下,使用熟悉的 JDBC 代码来操作 ...
3. HBase或Cassandra的Java客户端:这些是分布式数据库,用于存储大规模非结构化数据,Java API可以用来进行数据操作。 4. 数据预处理和清洗:Java可以用于数据清洗,例如去除重复值、处理缺失值等。 5. 大数据可视...