一般网站字体大小,新闻发布会的意义,购物网站功能模块设计,上外国网站用什么dnscassandra 入门要求 要遵循本教程#xff0c;您应该已经有一个正在运行的Cassandra实例#xff08; 一个小型集群会很好 #xff0c;但不是必需的#xff09;#xff0c;已安装Datastax Java驱动程序#xff08; 请参阅第I部分 #xff09;#xff0c;并且已经在这里进… cassandra 入门 要求 要遵循本教程您应该已经有一个正在运行的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); 现在您已连接到“演示”键空间让我们将用户插入“用户”表。 这正是我们先前在第I部分中所做的但是这次我们的做法有所不同。 使用准备好的语句更加安全这是将数据移入或移出数据库的最有效方式。 集群只需将准备好的语句解析一次然后将值绑定到变量然后我们执行绑定的语句以从集群读取/写入数据。 // 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,bobexample.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.htmlcassandra 入门