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

cassandra

cassandra

要求

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

试试看

在本演示中,我们将创建一个简单的控制台应用程序,该应用程序几乎与第一部分中的应用程序相同,只是这次我们将探索连接策略,准备好的语句和查询生成器。 打开文本编辑器,并使用“ 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 table
        PreparedStatement 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 entered
        Statement 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 age
        Statement update = QueryBuilder.update("demo", "users")
                .with(QueryBuilder.set("age", 36))
                .where((QueryBuilder.eq("lastname", "Jones")));
                        session.execute(update);
// Select and show the change
        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,并打印出剩余在users表中的所有信息。 您会注意到,鲍勃的信息在删除后不再返回(如果您以前插入过用户,则其他人可能会回来)。

// Delete the user from the users table
           Statement delete = QueryBuilder.delete().from("users")
                .where(QueryBuilder.eq("lastname", "Jones"));
        results = session.execute(delete);
        // Show that the user is gone
           select = 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

cassandra

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值