Skip to main content

Cassandraの使用

Cassandraは、アプリケーションの生成時に選択できる、サポートされているデータベースの1つです。

このジェネレータには1つの制限があります。

  • OAuth2認証はサポートしていません(Spring SecurityのOAuth2サーバにCassandraバックエンドを実装する必要があります)

Cassandraが選択されている場合は以下のようになります。

  • Spring Data Reactive for Apache Cassandraを使用します。
  • エンティティサブジェネレータは、NoSQLデータベースとのリレーションシップは(少なくともJPAとのリレーションシップのようには)持つことができないため、エンティティのリレーションシップを要求しません。
  • 生成されたエンティティは、IDである1つのパーティション・キーのみをサポートします。将来のバージョンでは、複合プライマリ・キーとクラスタリング・キーが提供される予定です。

移行ツール

Liquibaseと同様に、JHipsterには、CQL移行スクリプトを適用するためのツールが用意されていますが、いくつかの制限があります。

  • このツールは、起動時にアプリケーション自体によって実行されるのではなく、Dockerコンテナ内または手動で実行されます。
  • すべてのCQLスクリプトは、パターン{timestamp}_{description}.cqlに従い、src/main/resources/config/cql/changelog/のchangelogディレクトリに配置される必要があります。
  • changelogディレクトリにある、まだ適用されていないすべてのスクリプトは、アルファベット順(すなわち、タイムスタンプに従い)に適用されます。
  • Cassandraはトランザクションデータベースではないため、ツールが使用するテーブルにメタデータを挿入する前にエラーが発生した場合、CQL移行スクリプトが複数回実行されるリスクがあります。

ツールに関する情報は以下のとおりです。

  • エンティティを生成した後、そのCQLファイルは、JPA用のLiquibase変更ログを生成するのと同じ方法で、src/main/resources/config/cql/changelog/に生成されます
  • テストを実行する場合、src/main/resources/config/cql/changelog/ディレクトリ内のすべてのCQLスクリプトが、メモリ内のクラスタに自動的に適用されます。
    • これは、スクリプトをchangelogディレクトリにドロップしてテストに適用する以外に何もすることがないことを意味します。
  • このツールは、独自のcassandraテーブルschema_versionを使用してメタデータ情報を保存します。

このツールは、src/main/resources/config/cql/からの移行スクリプトを次の順序で適用します。

  1. create-keyspace.cql - 移行メタデータを格納するためのキースペースとschema_versionテーブルを作成します
  2. アルファベット順のすべてのcql/changelog/\*.cqlファイル

ツールの実行

Dockerを使用しているかどうかに応じて、マイグレーションツールを実行するためのオプションがいくつかあります。

Dockerの場合:

生成されたapp.ymlまたはcassandra.yml構成ファイルを使用して、docker-composeでCassandraクラスタを起動した場合、ツールはすでに実行され、すべてのcqlスクリプトが適用されています。

changelogディレクトリにCQLスクリプトを追加した後、クラスタを停止することなく、移行サービスを再度実行するdocker-serviceを再起動できます。 docker-compose -f src/main/docker/cassandra.yml up <app>-cassandra-migration

手動:

いくつかの前提条件があれば、ツールを手動で実行できます。後でデプロイメント・パイプラインに組み込むために、ツールに精通していると便利です。

前提条件:
  • Cassandraのコンタクトポイント環境変数を追加します。通常はexport CASSANDRA_CONTACT_POINT=`127.0.0.1` のようにローカルに設定します。
  • お気に入りのパッケージマネージャを使って、最新(>4)のbashバージョンとmd5sumをインストールします。
  • クラスパスにCQLSHを含めます。

ツールを実行するには、src/main/docker/cassandra/scripts/autoMigrate.sh src/main/resources/config/cql/changelog/のコマンドを使用します。

デフォルトでは、必要に応じてsrc/main/resources/config/create-keyspace.cqlスクリプトを使用してキースペースが作成されます。 これはsrc/main/docker/cassandra/scripts/autoMigrate.sh src/main/resources/config/cql/changelog/ create-keyspace-prod.cqlのように、2番目の引数で上書きできます。

クラスタに対して特定のスクリプトのみを実行する場合は、src/main/docker/cassandra/scripts/execute-cql.sh src/main/resources/config/cql/changelog/<your script>.cqlを使用します。

Linux以外のOSでのCassandraとDocker

Mac OSxとWindowsでは、Dockerコンテナは直接ホストされるのではなく、VirtualBox VM上にホストされます。 これらは、localhostではアクセスできませんが、VirtualBox IPをあてる必要があります。

Cassandraのコンタクトポイント(デフォルトではlocalhost)は、環境変数 export SPRING_DATA_CASSANDRA_CONTACTPOINTS=`docker-machine ip default` で上書きできます。

Cassandraノード:

Cassandraノードも仮想マシンでホストされるため、コンタクトポイントからアドレスを受信した後にCassandra Javaドライバにコンタクトしようとすると、エラーが発生します。 これを回避するには、ルーティングテーブルにルーティングルールを追加します。(source)(訳注:リンク先はすでになく今はこちら

Cassandraノードを実行しているコンテナのIPアドレスが172.18.0.xであると仮定します。 sudo route -n add 172.18.0.0/16 `docker-machine ip default`