使用Cassandra
来源:jhipster |
时间:2018-11-08
|
|

使用Cassandra

Cassandra是在生成应用程序时可以选择的受支持数据库之一。

这台发电机有一个限制:

  • 它不支持OAuth2身份验证(我们需要为Spring Security的OAuth2服务器实现Cassandra后端)

当Cassandra被选中时:

  • Cassandra CQL驱动程序用于访问数据库。我们不使用Spring Data Cassandra,因为我们更喜欢直接使用驱动程序。因此,存储库包含大量代码

  • 实体副发电机不会问你的实体关系,因为你不能有一个NoSQL的数据库(至少在你有JPA关系的方式)的关系

  • 生成的实体仅支持一个分区键,即ID。未来版本将提供复合主键和群集键

[BETA]迁移工具

Liquibase类似,JHipster提供了一个应用CQL迁移脚本的工具,但有一些限制:

  • 应用程序本身在启动时但在Docker容器内或手动运行时,该工具不会运行

  • 所有CQL脚本都必须遵循该模式{timestamp}_{description}.cql并放在changelog目录中:src/main/resources/config/cql/changelog/

  • 位于changelog目录中的所有尚未应用的脚本按字母顺序应用(即:遵循时间戳)

  • 由于Cassandra不是事务性数据库,如果在将工具使用的表中的元数据插入之前发生错误,则存在使CQL迁移脚本多次运行的风险

有关该工具的一些信息:

  • 生成实体后,其生成的CQL文件的生成src/main/resources/config/cql/changelog/方式与生成JPA的Liquibase更改日志的方式相同

  • 对于运行测试,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.ymlcassandra.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

如果您只想针对群集执行特定脚本,请执行以下操作: src/main/docker/cassandra/scripts/execute-cql.sh src/main/resources/config/cql/changelog/<your script>.cql

非Linux操作系统上的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驱动程序在从联系点接收到地址后尝试联系它们时会收到错误。
要解决此问题,您可以将路由规则添加到路由表(源)

假设运行Cassandra节点的容器的IP地址为172.18.0.x:
sudo route -n add 172.18.0.0/16 `docker-machine ip default`


提交
查看更多评论
没有更多评论