Cassandra Spring-数据多租户
Cassandra Spring-data Multitenancy
所以,我准备将多租户(每个租户一个键空间)方面与 spring-boot-starter-data-cassandra-reactive 集成,我试图找到一种解决方案来访问正确的键空间,我发现了这种使用查询构建器的方法:
Select select = QueryBuilder.select().from(tenantId,"counter");
select.where(QueryBuilder.eq("id", 1));
Mono<Counter> flux = reactiveCassandraOperations.selectOne(select.toString(), Counter.class);
我发现它在开发时间方面成本很高,尤其是当我们有插入请求时..
根据您的经验,有一个实用的解决方案,我可以使用 ReactiveCassandraRepository 方法(保存、更新、findById ..)插入键空间名称
能否支持一下,先谢谢了。
不是 Cassandra 或 Spring 专家,但我被告知您应该使用 ReactiveCqlTemplate(或 ReactiveCqlOperations)而不是 ReactiveCassandraTemplate(或 ReactiveCassandraOperations)。请参阅此 link https://github.com/spring-projects/spring-data-cassandra/issues/1218 并关注此页面中的 link。
从link,您可以从 CassandraTemplate 中获取 CqlOperations,如下所示
private final ReactiveCqlOperations cqlOps;
private final YourRepository repository;
@Autowired
public YourService(YourRepository repository, ReactiveCassandraTemplate reactiveCassandraTemplate){
this.repository = repository;
this.cqlOps = reactiveCassandraTemplate.getReactiveCqlOperations();
}
然后在您的存储库中
public interface YourRepository extends ReactiveCassandraRepository<YourData, Long> {
default Flux<YourData> getCQL(ReactiveCqlOperations cqlOps, YourData yourData) {
return cqlOps.query("SELECT * FROM genericdatadb.YourData WHERE val0 = ? AND val1 = ?;",
YourRepository.YourDataMapper.INSTANCE,
yourData.getVal0(),
yourData.getVal1());
}
在查询中,genericdatadb 是键空间,YourData 是 table。从这里,您可以添加一个“?”其中 genericdatadb 是或使用 String.format 语句创建查询字符串。也许有 Cassandra 专家有更好的解决方案?
所以,我准备将多租户(每个租户一个键空间)方面与 spring-boot-starter-data-cassandra-reactive 集成,我试图找到一种解决方案来访问正确的键空间,我发现了这种使用查询构建器的方法:
Select select = QueryBuilder.select().from(tenantId,"counter");
select.where(QueryBuilder.eq("id", 1));
Mono<Counter> flux = reactiveCassandraOperations.selectOne(select.toString(), Counter.class);
我发现它在开发时间方面成本很高,尤其是当我们有插入请求时.. 根据您的经验,有一个实用的解决方案,我可以使用 ReactiveCassandraRepository 方法(保存、更新、findById ..)插入键空间名称
能否支持一下,先谢谢了。
不是 Cassandra 或 Spring 专家,但我被告知您应该使用 ReactiveCqlTemplate(或 ReactiveCqlOperations)而不是 ReactiveCassandraTemplate(或 ReactiveCassandraOperations)。请参阅此 link https://github.com/spring-projects/spring-data-cassandra/issues/1218 并关注此页面中的 link。
从link,您可以从 CassandraTemplate 中获取 CqlOperations,如下所示
private final ReactiveCqlOperations cqlOps;
private final YourRepository repository;
@Autowired
public YourService(YourRepository repository, ReactiveCassandraTemplate reactiveCassandraTemplate){
this.repository = repository;
this.cqlOps = reactiveCassandraTemplate.getReactiveCqlOperations();
}
然后在您的存储库中
public interface YourRepository extends ReactiveCassandraRepository<YourData, Long> {
default Flux<YourData> getCQL(ReactiveCqlOperations cqlOps, YourData yourData) {
return cqlOps.query("SELECT * FROM genericdatadb.YourData WHERE val0 = ? AND val1 = ?;",
YourRepository.YourDataMapper.INSTANCE,
yourData.getVal0(),
yourData.getVal1());
}
在查询中,genericdatadb 是键空间,YourData 是 table。从这里,您可以添加一个“?”其中 genericdatadb 是或使用 String.format 语句创建查询字符串。也许有 Cassandra 专家有更好的解决方案?