LoginSignup
5
2

More than 5 years have passed since last update.

Cassandra の Java 向け Object Mapper を触ってみた

Last updated at Posted at 2017-06-11

Cassandra の Java 向け Object Mapper を触ってみた

DataStax の公式のマニュアルに載っているサンプルコードを、ぺたぺた切り貼りして動かしてみたときのメモ。

前提

  • Ubuntu 17.04
  • Cassandra 3.10
  • Java 側の Cassandra Driver 3.2.0

準備

Cassandra 側

  1. Cassandra のインストール

    $ wget http://ftp.jaist.ac.jp/pub/apache/cassandra/3.10/apache-cassandra-3.10-bin.tar.gz
    $ tar -zxvf apache-cassandra-3.10-bin.tar.gz
    $ sudo mv apache-cassandra-3.10/ /opt/cassandra
    
  2. Cassandra サーバの起動

    $ /opt/cassandra/bin/cassandra
    
  3. Keyspace の作成(名前: ks

    $ /opt/cassandra/bin/cqlsh 127.0.0.1 -e "\
    CREATE KEYSPACE ks\
      WITH REPLICATION = { 'class': 'SimpleStrategy', 'replication_factor': 1 };"
    
  4. Table の作成(名前: users

    $ /opt/cassandra/bin/cqlsh 127.0.0.1 -e "\
    CREATE TABLE ks.users (\
      user_id uuid,\
      name text,\
      strength int,\
      PRIMARY KEY(user_id, name)\
    );"
    

Java 側

  • pom.xml

    • cassandra-driver-corecassandra-driver-mapping の依存を追加する

      pom.xml
      ...
      <dependency>
          <groupId>com.datastax.cassandra</groupId>
          <artifactId>cassandra-driver-core</artifactId>
          <version>3.2.0</version>
      </dependency>
      <dependency>
          <groupId>com.datastax.cassandra</groupId>
          <artifactId>cassandra-driver-mapping</artifactId>
          <version>3.2.0</version>
      </dependency>
      ...
      
  • ソースコード

    • マッピング対象のクラス

      User.java
      package sample;
      
      import com.datastax.driver.mapping.annotations.ClusteringColumn;
      import com.datastax.driver.mapping.annotations.Column;
      import com.datastax.driver.mapping.annotations.Param;
      import com.datastax.driver.mapping.annotations.PartitionKey;
      import com.datastax.driver.mapping.annotations.Table;
      import java.util.UUID;
      
      @Table(keyspace = "ks", name = "users",
          readConsistency = "QUORUM",
          writeConsistency = "QUORUM",
          caseSensitiveKeyspace = false,
          caseSensitiveTable = false)
      public class User {
      
        @PartitionKey
        @Column(name = "user_id")
        private UUID userId;
      
        @ClusteringColumn
        private String name;
      
        private int strength;
      
        public User(UUID userId, String name, int strength) {
          this.userId = userId;
          this.name = name;
          this.strength = strength;
        }
      }
      
    • メインクラス

      Main.java
      package sample;
      
      import com.datastax.driver.core.Cluster;
      import com.datastax.driver.core.Session;
      import com.datastax.driver.mapping.Mapper;
      import com.datastax.driver.mapping.MappingManager;
      import java.util.UUID;
      
      public class Main {
      
        public static void main(String[] args) {
          Cluster cluster = null;
          try {
            cluster = Cluster.builder()
                .addContactPoint("127.0.0.1")
                .build();
            Session session = cluster.connect();
            MappingManager manager = new MappingManager(session);
            Mapper<User> mapper = manager.mapper(User.class);
      
            User u = new User(UUID.randomUUID(), "John Doe", 9999);
            mapper.save(u);
      
          } finally {
            if (cluster != null) {
              cluster.close();
            }
          }
        }
      }
      

実行結果

上記のメインクラス実行後、データが挿入されたかどうかを cqlsh から確認してみる。

$ /opt/cassandra/bin/cqlsh 127.0.0.1 -e "SELECT * FROM ks.users;"

 user_id                              | name     | strength
--------------------------------------+----------+----------
 e918961b-57c1-4f5d-8c4e-9d08e9ea4e7a | John Doe |     9999

(1 rows)

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2