我正在使用Spring
应用,需要使用Cassandra
与Hector
对话。需要一些帮助,如何处理。我想使用JPA
并利用Spring的依赖注入功能。
任何一点都有帮助!
答案 0 :(得分:1)
回答您的第一个问题:您必须设计并规范化您的数据模型,以便减少多列族之间的遍历。对于例如如果你在CF项目列表中存储了一些用户ID,你应该插入用户的JSON对象,而不是那个用户ID,通过这种方式获取遍历到用户管理员CF可以避免
答案 1 :(得分:0)
对于JPA合规我使用昆德拉,我可以非常容易地将它与弹簧整合,是的,因为Hardik Bhalani已经建议仔细设计柱系列以实现最高效率
答案 2 :(得分:0)
我已经设法使用这个documentation很容易地完成它,但这会让你得到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();
我希望这会有所帮助。
答案 3 :(得分:0)
您可以尝试使用Playorm,它支持两个列系列的sql类连接2.也为列提供索引支持。