Apache Cassandra和Java入门(第二部分)

要求

要遵循本教程,您应该已经有一个正在运行的Cassandra实例( 一个小型集群会很好 ,但不是必需的),已安装Datastax Java驱动程序( 请参阅第I部分 ),并且已经在这里进行了10分钟的演练: http ://planetcassandra.org/create-a-keyspace-and-table/ 。

试试看

对于本演示,我们将创建一个简单的控制台应用程序,该应用程序几乎与第I部分中的应用程序相同,只是这次我们将探索连接策略,准备好的语句和查询生成器。 打开文本编辑器,并使用“ GettingStartedTwo”类和单个main方法创建一个Java文件。

public class GettingStartedTwo {public static void main(String[] args) {Cluster cluster;Session session;ResultSet results;Row rows;

然后,我们可以连接到集群并创建一个会话实例。

// Connect to the cluster and keyspace "demo"
Cluster cluster = Cluster.builder().addContactPoint("localhost").build();
Session session = cluster.connect("demo");

但是,等等,既然我们正在运行一个群集而不是一个实例,那么在故障转移的情况下,我们需要采取一些保护措施。 我们可以使用RetryPolicy来做到这一点。retry策略确定当请求超时或节点不可用时要采用的默认行为。 在这种情况下,我们使用DefaultRetryPolicy,它将重试查询之一:

  • 读取超时时,已回复足够多的副本但未接收到数据。
  • 在写超时时,如果我们在写批处理语句使用的日志时超时。
cluster = Cluster.builder().addContactPoint("192.168.0.30").withRetryPolicy(DefaultRetryPolicy.INSTANCE).build();
session = cluster.connect("demo");

负载平衡策略将确定要在哪个节点上运行查询。 由于客户端可以读取或写入任何节点,因此有时效率低下。 如果一个节点收到另一个节点拥有的读取或写入,它将为客户端协调该请求。 我们可以使用负载平衡策略来控制该操作。 TokenAwarePolicy确保请求将转到负责主键指示的数据的节点或副本。 它包装在DCAwareRoundRobinPolicy周围,以确保请求保留在本地数据中心中。 这对我们来说是一个不错的选择,因为尽管目前我们只有一个本地集群,但我们已经在考虑下一步,将其扩展到多数据中心。

cluster = Cluster.builder().addContactPoint("192.168.0.30").withRetryPolicy(DefaultRetryPolicy.INSTANCE).withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy())).build();
session = cluster.connect("demo");

现在您已连接到“演示”键空间,现在将用户插入“用户”表中。 这正是我们之前在第一部分中所做的,但是这次我们的做法有所不同。 使用准备好的语句更加安全,这是将数据移入或移出数据库的最有效方式。 集群只需要对准备好的语句进行一次解析,然后将值绑定到变量,然后我们执行绑定的语句以从集群读取/写入数据。

// Insert one record into the users tablePreparedStatement statement = session.prepare("INSERT INTO users" + "(lastname, age, city, email, firstname)"+ "VALUES (?,?,?,?,?);");BoundStatement boundStatement = new BoundStatement(statement);session.execute(boundStatement.bind("Jones", 35, "Austin","bob@example.com", "Bob"));

使用Java驱动程序,我们可以轻松地撤消用户。 在Java的Apache Cassandra入门入门的第一部分中,我们使用了CQL的字符串表示形式。 现在(以及本教程的其余部分),我们将使用Query Builder进行相同的操作,它更加安全,并且可以避免潜在的CQL注入攻击。

// Use select to get the user we just enteredStatement select = QueryBuilder.select().all().from("demo", "users").where(eq("lastname", "Jones"));results = session.execute(select);for (Row row : results) {System.out.format("%s %d \n", row.getString("firstname"),row.getInt("age"));}

由于是鲍勃(Bob)的生日,我们将更新他的年龄。

// Update the same user with a new ageStatement update = QueryBuilder.update("demo", "users").with(QueryBuilder.set("age", 36)).where((QueryBuilder.eq("lastname", "Jones")));session.execute(update);
// Select and show the changeselect = QueryBuilder.select().all().from("demo", "users").where(eq("lastname", "Jones"));results = session.execute(select);for (Row row : results) {System.out.format("%s %d \n", row.getString("firstname"),row.getInt("age"));

现在,让我们从表中删除Bob,并打印出剩余在users表中的所有信息。 您会注意到,鲍勃的信息在删除后不再返回(如果您以前插入过用户,则其他人可能会回来)。

// Delete the user from the users tableStatement delete = QueryBuilder.delete().from("users").where(QueryBuilder.eq("lastname", "Jones"));results = session.execute(delete);// Show that the user is goneselect = QueryBuilder.select().all().from("demo", "users");results = session.execute(select);for (Row row : results) {System.out.format("%s %d %s %s %s\n", row.getString("lastname"),row.getInt("age"), row.getString("city"),row.getString("email"), row.getString("firstname"));}

完成后,请确保连接关闭。

// Clean up the connection by closing it
cluster.close();}
}

CQL与SQL非常相似,在许多情况下,相同的语法将起作用。 如果您具有关系数据库的背景知识,这使得查询数据非常简单。您刚刚设法连接到Cassandra集群并针对实时(本地)数据库执行查询。 希望这证明了使用Java驱动程序使用Cassandra多么容易。 GitHub上提供了此示例的完整控制台应用程序的要点。

翻译自: https://www.javacodegeeks.com/2014/12/getting-started-with-apache-cassandra-and-java-part-ii.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zabbix监控多个JVM进程

一、场景说明: 我们这边的环境用的是微服务,每个程序都是有单独的进程及单独的端口号,但用jps查询出来的结果有些还会有重名的情况,所以某些脚本不太适用本场景; 二、需求说明: 需使用Zabbix-server监控每个…

(网页)swiper.js轮播图插件

Swiper4.x使用方法 1.首先加载插件&#xff0c;需要用到的文件有swiper.min.js和swiper.min.css文件。可下载Swiper文件或使用CDN。 <!DOCTYPE html> <html> <head>...<link rel"stylesheet" href"path/to/swiper.min.css"> <…

Android 4.0 Launcher源码分析系列(二)

原文&#xff1a;http://mobile.51cto.com/hot-314700.htm 上一节我们研究了Launcher的整体结构&#xff0c;这一节我们看看整个Laucher的入口点&#xff0c;同时Laucher在加载了它的布局文件Laucher.xml时都干了些什么。 我们在源代码中可以找到LauncherApplication&#xff0…

使用JFace Viewer延迟获取模型元素

Eclipse JFace Viewers显示的模型元素有时需要花费大量时间来加载。 因此&#xff0c; 工作台提供了IDeferredWorkbenchAdapter类型以在后台获取此类模型元素。 不幸的是&#xff0c;似乎仅通过DeferredTreeContentManager派生的AbstractTreeViewer支持此机制。 因此&#xff…

架构设计

好的架构是进化出来的 &#xff0c;不是设计出来的&#xff1b; 不同时期和不同环境有着不同的最佳架构&#xff1b; 存在即合理&#xff0c;合适的才是最好的&#xff1b; 转载于:https://www.cnblogs.com/sky-jyq/p/11527254.html

(网页)js每隔5分钟执行一次ajax请求的实现方法(转)

转自脚本之家: 一个页面好像只能有一个 window.οnlοadfunction(){}&#xff0c;所以要有多个事件&#xff0c;这样写就好了 window.onloadfunction(){ //假设这里每个五分钟执行一次test函数 publicBusi(); personBusi(); } function publicBusi(){ setTimeout(perso…

Flash网站流量统计的方法

在我印象中&#xff0c;一般的免费流量统计代码是不允许嵌套在Flash中使用的&#xff0c;而且也不允许在内置IFrame中嵌套使用&#xff0c;网上检索了一下&#xff0c;找到了Flash网站的流量统计办法&#xff0c;其实就是使用内置IFrame的办法&#xff0c;使用的是51啦&#xf…

从浏览器端JavaScript代码进行服务器端日志记录

应用程序日志记录是我们在部署到应用程序服务器上的应用程序中都要做的事情&#xff0c;对吗&#xff1f; 对于大多数Java开发人员而言&#xff0c;使用Log4J或Logback之类的框架似乎都是理所当然的。 但是&#xff0c;我们编写的在那些讨厌的浏览器中运行的代码又如何呢&#…

Oracle连接字符串记录

<?xml version"1.0" encoding"utf-8"?> <!--有关如何配置 ASP.NET 应用程序的详细信息&#xff0c;请访问https://go.microsoft.com/fwlink/?LinkId301879--> <configuration><configSections><!-- For more information on…

(网页)JS编程中,有时需要在一个方法返回两个个或两个以上的数据

转自脚本之家: 1 使用数组的方式&#xff0c;如下&#xff1a; <html> <head><title>JS函数返回多个值</title> </head> <body><input type"button" onclick"getNames()" value"test" /><script …

(网页)AngularJS 参考手册

指令描述ng-app定义应用程序的根元素。ng-bind绑定 HTML 元素到应用程序数据ng-bind-html绑定 HTML 元素的 innerHTML 到应用程序数据&#xff0c;并移除 HTML 字符串中危险字符ng-bind-template规定要使用模板替换的文本内容ng-blur规定 blur 事件的行为ng-change规定在内容改…

Apache Cassandra和Java入门(第一部分)

在此页面上&#xff0c;您将学到足够的知识来开始使用NoSQL Apache Cassandra和Java&#xff0c;包括如何安装&#xff0c;尝试一些基本命令以及下一步做什么。 要求 要遵循本教程&#xff0c;您应该已经有一个正在运行的Cassandra实例&#xff0c;并且已经在这里进行了10分钟…

vagrant网站中box下载方法

假设需要下载Laravel/homestead这个包。 首先定位到地址&#xff1a;https://app.vagrantup.com/laravel/boxes/homestead/versions/8.0.0 然后直接在后面加上 “providers/virtualbox.box”就可以下载了 (注意virtualbox.box是指供应商的名字&#xff0c;不同供应商提供不同名…

响应式Web设计——最佳指南

2012年被称为智能手机年。根据最近一份调查显示&#xff0c;美国的智能手机覆盖率已达50%。现在确实是提升移动终端用户体验的大好时机。如果你正运营一个网站&#xff0c;那就必须有一个响应式的Web设计&#xff0c;以便可以从移动终端上很好地访问你的网站。如果你还没意识到…

Eclipse扩展的轻量级集成测试

最近&#xff0c;我为Eclipse扩展点评估引入了一个小助手。 辅助程序努力减少通用编程步骤的样板代码&#xff0c;同时增加开发指导和可读性。 这篇文章是希望的后续文章&#xff0c;展示了如何将实用程序与AssertJ定制断言结合使用&#xff0c;以编写针对Eclipse扩展的轻量级…

原生js实现简单的焦点图效果

用到一些封装好的运动函数&#xff0c;主要是定时器 效果为图片和图片的描述定时自动更换 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style type"text/css">ul,li,p,h3 {padding: 0;…

二:熟悉 TCP/IP 协议

一篇文章带你熟悉 TCP/IP 协议&#xff08;网络协议篇二&#xff09; 同样的&#xff0c;本文篇幅也比较长&#xff0c;先来一张思维导图&#xff0c;带大家过一遍。 一图看完本文 一、 计算机网络体系结构分层 计算机网络体系结构分层计算机网络体系结构分层不难看出&…

NYOJ 451(组合数+全错位)

光棍节的快乐 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;2描述光棍们&#xff0c;今天是光棍节。聪明的NS想到了一个活动来丰富这个光棍节。 规则如下&#xff1a; 每个光棍在一个纸条上写一个自己心仪女生的名字&#xff0c;然后把这些纸条…

在Completablefuture和Observable之间转换

Java 8中的CompletableFuture<T>是对T类型的值将来将可用的承诺的高级抽象。 Observable<T>非常相似&#xff0c;但是它承诺将来会出现任意数量的项&#xff0c;从0到无穷大。 异步结果的这两种表示与仅使用一项即可使用Observable而不是CompletableFuture情况非常…

Box 'laravel/homestead' could not be found.

vbox vagrant.box Homestead 都安裝好的情況下。在homestead目錄下&#xff0c;執行vagrant up出錯 Homestead\scripts\文件夹中&#xff0c;打开homestead.rb文件打开homestead.rb文件 把config.vm.box_version settings["version"] || "> 0.4.0"改为…