在我的帖子Hello Cassandra中 ,我研究了如何下载Cassandra NoSQL数据库并使用cqlsh连接到Cassandra数据库。 在本文中,我将介绍从Java客户端连接到Cassandra数据库的基础知识。

尽管有几种可用于从Java访问Cassandra数据库的 框架 ,但我将在本文中使用DataStax Java Client JAR 。 GitHub上提供了适用于 Apache Cassandra的DataStax Java驱动程序 。 datastax / java-driver GitHub项目页面指出,它是“ Apache Cassandra的Java客户端驱动程序”,“仅与Cassandra查询语言版本3( CQL3 )配合使用”,并且“已获得Apache许可,版本为2.0” 。

Apache Cassandra的Java驱动程序2.0页面提供了有关该驱动程序的高级概述和体系结构详细信息 。 它的“ 编写您的第一个客户端”部分提供了代码清单和说明,这些清单和说明涉及使用Java驱动程序连接到Cassandra以及从Java代码执行CQL语句 。 这篇文章中的代码清单是适用于我的示例案例的那些示例的改编。

Cassandra Java驱动程序具有多个依赖项 。 适用于Apache Cassandra的Java Driver 2.0 文档包括一个名为“ 设置Java开发环境”的页面,该页面概述了Java Driver 2.0的依赖项 : cassandra-driver-core-2.0.1.jar ( datastax / java-driver 2.0 ), netty- 3.9.0-Final.jar ( 网状 直接 ), 番石榴16.0.1.jar ( 番石榴16 直接 ), 度量核-3.0.2.jar ( 度量核心 ),以及SLF4J-API-1.7.5.jar ( slf4j direct )。 我还发现我需要将LZ4Factory.java和snappy -java放在类路径上。

下一个代码清单是一个名为CassandraConnector的简单类。

CassandraConnector.java

package com.marxmart.persistence;import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Session;import static java.lang.System.out;/*** Class used for connecting to Cassandra database.*/
public class CassandraConnector
{/** Cassandra Cluster. */private Cluster cluster;/** Cassandra Session. */private Session session;/*** Connect to Cassandra Cluster specified by provided node IP* address and port number.** @param node Cluster node IP address.* @param port Port of cluster host.*/public void connect(final String node, final int port){this.cluster = Cluster.builder().addContactPoint(node).withPort(port).build();final Metadata metadata = cluster.getMetadata();out.printf("Connected to cluster: %s\n", metadata.getClusterName());for (final Host host : metadata.getAllHosts()){out.printf("Datacenter: %s; Host: %s; Rack: %s\n",host.getDatacenter(), host.getAddress(), host.getRack());}session = cluster.connect();}/*** Provide my Session.** @return My session.*/public Session getSession(){return this.session;}/** Close cluster. */public void close(){cluster.close();}
}

如下面的代码清单所示,可以调用上述连接类。

使用CassandraConnector编码

/*** Main function for demonstrating connecting to Cassandra with host and port.** @param args Command-line arguments; first argument, if provided, is the*    host and second argument, if provided, is the port.*/
public static void main(final String[] args)
{final CassandraConnector client = new CassandraConnector();final String ipAddress = args.length > 0 ? args[0] : "localhost";final int port = args.length > 1 ? Integer.parseInt(args[1]) : 9042;out.println("Connecting to IP Address " + ipAddress + ":" + port + "...");client.connect(ipAddress, port);client.close();
}

最后一个代码中的示例代码指定了默认节点和localhost端口以及端口9042 。 该端口号在apache-cassandra / conf目录中的cassandra.yaml文件中指定。 Cassandra 1.2文档在cassandra.yaml配置文件上有一个页面, 该页面将cassandra.yaml文件描述为“ Cassandra的主要配置文件”。 顺便提一句,该目录中的另一个重要配置文件是cassandra-env.sh ,它为基于Java的 Cassandra数据库定义了许多JVM选项。

对于本文中的示例,我将使用通过以下Cassandra查询语言(CQL)创建的MOVIES表:

createMovie.cql

CREATE TABLE movies
(title varchar,year int,description varchar,mmpa_rating varchar,dustin_rating varchar,PRIMARY KEY (title, year)
);

可以使用命令source 'C:\cassandra\cql\examples\createMovie.cql'在cqlsh中执行以上文件(当然,假设文件位于指定目录中),这将在下一个屏幕快照中演示。

这里值得强调的一件事是,由cqlsh describe命令将创建为varchar 数据类型的列描述为text数据类型。 尽管我直接通过cqlsh创建了该表,但我也可以用Java创建该表,如下面的代码清单和代码清单cqlsh相关屏幕快照所示。

使用Java驱动程序创建Cassandra表

final String createMovieCql ="CREATE TABLE movies_keyspace.movies (title varchar, year int, description varchar, "+ "mmpa_rating varchar, dustin_rating varchar, PRIMARY KEY (title, year))";
client.getSession().execute(createMovieCql);

上面的代码访问实例变量client 。 接下来显示的是带有此实例变量的类。

MoviePersistence.java的外壳

package dustin.examples.cassandra;import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;import java.util.Optional;import static java.lang.System.out;/*** Handles movie persistence access.*/
public class MoviePersistence
{private final CassandraConnector client = new CassandraConnector();public MoviePersistence(final String newHost, final int newPort){out.println("Connecting to IP Address " + newHost + ":" + newPort + "...");client.connect(newHost, newPort);}/*** Close my underlying Cassandra connection.*/private void close(){client.close();}
}

使用如上所述创建的MOVIES表(通过cqlsh或Java客户端代码创建),接下来的步骤是处理与该表相关的数据。 下一个代码清单显示了一种可用于将新行写入MOVIES表的方法。

/*** Persist provided movie information.** @param title Title of movie to be persisted.* @param year Year of movie to be persisted.* @param description Description of movie to be persisted.* @param mmpaRating MMPA rating.* @param dustinRating Dustin's rating.*/
public void persistMovie(final String title, final int year, final String description,final String mmpaRating, final String dustinRating)
{client.getSession().execute("INSERT INTO movies_keyspace.movies (title, year, description, mmpa_rating, dustin_rating) VALUES (?, ?, ?, ?, ?)",title, year, description, mmpaRating, dustinRating);
}

将数据插入MOVIES表后,我们需要能够对其进行查询。 下一个代码清单显示了按标题和年份查询电影的一种潜在实现。

使用Cassandra Java驱动程序查询

/*** Returns movie matching provided title and year.** @param title Title of desired movie.* @param year Year of desired movie.* @return Desired movie if match is found; Optional.empty() if no match is found.*/
public Optional<Movie> queryMovieByTitleAndYear(final String title, final int year)
{final ResultSet movieResults = client.getSession().execute("SELECT * from movies_keyspace.movies WHERE title = ? AND year = ?", title, year);final Row movieRow = movieResults.one();final Optional<Movie> movie =movieRow != null? Optional.of(new Movie(movieRow.getString("title"),movieRow.getInt("year"),movieRow.getString("description"),movieRow.getString("mmpa_rating"),movieRow.getString("dustin_rating"))): Optional.empty();return movie;
}

如果我们需要删除已经存储在Cassandra数据库中的数据,这很容易实现,如下面的代码清单所示。

使用Cassandra Java驱动程序删除

/*** Deletes the movie with the provided title and release year.** @param title Title of movie to be deleted.* @param year Year of release of movie to be deleted.*/
public void deleteMovieWithTitleAndYear(final String title, final int year)
{final String deleteString = "DELETE FROM movies_keyspace.movies WHERE title = ? and year = ?";client.getSession().execute(deleteString, title, year);
}

如本博文中的示例所示,使用Java驱动程序可以很容易地从Java应用程序访问Cassandra。 值得注意的是,Cassandra是用Java编写的 。 对于Java开发人员来说,这样做的好处是,许多Cassandra的配置值都是Java开发人员已经熟悉的JVM选项。 通过Cassandra conf目录中的cassandra-env.sh文件,可以指定Cassandra使用的标准JVM选项 (例如堆大小参数-Xms-Xmx-Xmn ), HotSpot特定的JVM选项 (例如-XX:-HeapDumpOnOutOfMemoryError-XX:HeapDumpPath , 垃圾收集调整选项和垃圾收集日志记录选项 ), 启用断言 ( -ea )以及将Cassandra公开以进行远程JMX管理 。

说到Cassandra和JMX,可以通过JMX 监视Cassandra ,如监视Cassandra群集的“使用JConsole监视”部分中所述 。 摘录 的《监控Cassandra的基础知识》还讨论了使用JMX监控Cassandra。 由于Java开发人员更可能熟悉JMX客户端(如JConsole和VisualVM) ,因此这是一种监视Java开发人员Cassandra的直观方法。

Cassandra的Java根的另一个优点是,可以扩展Cassandra使用的Java类,并且可以通过Java自定义Cassandra。 例如,可以通过扩展AbstractType类来实现自定义数据类型 。

结论

Cassandra Java驱动程序使从Java应用程序访问Cassandra变得容易。 Cassandra还具有基于Java的重要配置和监视功能,甚至可以使用Java进行自定义。

翻译自: https://www.javacodegeeks.com/2014/05/connecting-to-cassandra-from-java.html

从Java连接到Cassandra相关推荐

  1. datastax.repo_使用Datastax Java驱动程序与Cassandra进行交互

    datastax.repo 今天,我这次返回了更多的Cassandra和Java集成,重点是使用Datastax Java驱动程序,而不是我已经写了很多文章的Spring Data Cassandra ...

  2. 使用Datastax Java驱动程序与Cassandra进行交互

    今天,我这次返回了更多的Cassandra和Java集成,重点是使用Datastax Java驱动程序,而不是我已经写了很多文章的Spring Data Cassandra. Spring Data实 ...

  3. java连接cassandra,使用JDBC驱动程序连接到Cassandra

    遵循Cassandra文档,您应该使用Datastax Java API . Cassandra它不是一个SQL数据库,而是一个NOSQL因此有完全不同的系统 . 如果您有maven项目,请在pom. ...

  4. java连接到mysql_[操作系统]Java如何连接到MySQL数据库的

    [操作系统]Java如何连接到MySQL数据库的 0 2016-05-01 15:00:15 下载:mysql-connector-java-5.1.38.tar.gz http://dev.mysq ...

  5. java mysql nullpointerexception_无法从Java连接到MySQL:MySQL驱动程序连接逻辑中的NullPointerException...

    我正在尝试连接到我在 Java程序中使用 MySQL创建的数据库,但它总是失败. 为了举例,这是我的代码: import java.sql.*; public class Squirrel { pub ...

  6. 无法将mysql服务器连接到_无法从java连接到mysql服务器

    我在这行代码中收到错误"Communications link failure": mySqlCon = DriverManager.getConnection("jdb ...

  7. cassandra java cql_使用Cassandra CQL Java Driver 访问Lindorm

    适用Driver执行操作 DDL操作// 创建keyspace,指定对应strategy, replication factor. session.execute( "CREATE KEYS ...

  8. java 面试 接到邀请后你可以做哪些准备

    1.装开发软件如myeclipse 2.装数据库如oracle 3.熟悉框架如iis或ssm 4.部署练习项目 4. 增删改操作 (操作的时候对着数据库看数据)

  9. 自定义Cassandra数据类型

    在博客文章< 从Java连接到Cassandra>中 ,我提到了用Java 实现的Cassandra Java开发人员的一个优势是能够创建自定义 Cassandra数据类型 . 在这篇文章 ...

最新文章

  1. java 调用启动远程shell脚本,启动spark
  2. OVS datapath之action分析(十九)
  3. Android开发——RecyclerView特性以及基本使用方法(二)
  4. 二 jQuery 语法
  5. Windows CE的学习路线
  6. 【译】理解JavaScript闭包——新手指南
  7. 慢慢人生路,学点Jakarta基础-深入剖析Java的接口和抽象类
  8. Facebook 数据泄露高达 5000 万人,斯诺登怒评!
  9. struts2入门操作
  10. 模糊搜索框(H5),兼容安卓和ios(令人头大的ios输入法)
  11. 一个分组查询的SQL 常用算法(附源码可直接执行)
  12. gsp计算机系统内审结论,GSP计算机系统内审表.docx
  13. 向日葵远程软件连接Ubuntu无法显示桌面之解决方案
  14. Storage LUN connected on Emulex / Qlogica HBA not detecting during boot time.
  15. linux x200 黑屏,Thinkpad x200黑屏(一长两短) 复原
  16. Coder往事之: 一些炫酷的特效 for web 前端 (一)
  17. CentOS搭建SVN服务器
  18. unity_插屏广告
  19. android缩放组件,Android控件实现图片缩放功能
  20. 杨振宁追求的物理美学,居然在这里实现,物理学史上颜值最高的组合,看完后跪了……

热门文章

  1. c传给php数据解包,小程序源码提取工具,完美解包,一键提取小程序源代码工具_PHP源码...
  2. mysql 行转列分级输出_MySQL如何实现行转列分级输出?_MySQL
  3. wxml报错原因_C#生成、解析xml文件以及处理报错原因
  4. 基于Apache POI 向xlsx写入数据
  5. java oca_OCA第1部分中的Java难题
  6. jakarta ee_MicroProfile在Jakarta EE时代的作用
  7. openjdk和jdk_JDK 11:发行候选更新和OpenJDK JDK 11 LTS
  8. 净资产滚动率_净资产的结构
  9. jboss4 迁移_JBoss BPM Travel Agency的微服务迁移故事
  10. 声明式编程与函数式编程_实用程序类与函数式编程无关