我正在开发一个Spring
应用程序,需要与Cassandra
使用Hector
. 需要一些关于如何接近的帮助。我也想使用JPA
和利用 Spring 的依赖注入特性。
任何积分都有帮助!
回答您的第一个问题:您必须设计和规范您的数据模型,以便它可以减少多个列族之间的遍历。例如,如果您在 CF itemlist 中存储一些用户 ID,您应该插入具有使用详细信息的用户 JSON 对象而不是该用户 ID,这样可以避免在获取对 usermaster CF 的遍历时
我已经设法使用这个文档很容易地完成了它,但这给你留下了 SimpleCassandraDao(你可以将它注入你的 DAO)——这是非常有限的。
我所做的是务实地创建连接:
@PostConstruct
public void connect() {
if (Boolean.parseBoolean(isActive)) {
CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(this.socket);
cluster = HFactory.getOrCreateCluster(clusterName, cassandraHostConfigurator);
ConfigurableConsistencyLevel consistencyLevelPolicy = new ConfigurableConsistencyLevel();
consistencyLevelPolicy.setDefaultReadConsistencyLevel(getConsistencyLevelPolicy());
keyspace = HFactory.createKeyspace(keyspaceName, cluster, consistencyLevelPolicy);
if (isConnected())
fireConnectionEvent(true);
else {
LOG.error("Could not connect to socket " + this.socket + ". Connection to Cassandra DB is down!!!");
}
} else {
LOG.info("Cassandra connection is not active hence could not connect to socket " + this.socket
+ ". Please activate the connection before trying to connect");
}
}
此方法是 spring bean 的一部分(使用Component注释进行注释),因此一旦部署应用程序,就会创建连接池。如您所见,我正在触发一个连接事件(使用Spring Application-Event支持)。该事件包含新创建的键空间,然后被我的 Dao 捕获。这样,我的 Dao 就可以初始化所需的查询。例如:
StringSerializer stringSerializer = StringSerializer.get();
SliceQuery<String, String, String> query = HFactory.createSliceQuery(this.keyspace, stringSerializer, stringSerializer, stringSerializer)
.setColumnFamily(columnFamily).setRange(null, null, false, 4).setKey(rowKey);
ColumnSlice<String, String> columnsSlice = query.execute().get();
List<HColumn<String, String>> columns = columnsSlice.getColumns();
我希望这有帮助。
对于 JPA 合规性,我使用了 Kundera,我可以很容易地将它与弹簧集成,是的,正如 Hardik Bhalani 建议的那样,色谱柱系列经过精心设计以实现最大效率
您可以尝试使用 Playorm,它 1. 支持两个列族的 sql 类连接 2. 也提供对列的索引支持。