2013-05-31 43 views
-1

我正在處理Spring應用程序,需要使用HectorCassandra對話。需要一些幫助,以便如何處理。我想使用JPA並利用Spring的依賴注入功能。集成彈簧與卡桑德拉使用赫克托爾

任意積分幫助!

+1

請告訴我們你已經嘗試過。 – krlmlr

+0

您好我試圖將我的Spring MVC項目與我的本地Cassandra DB集成。已配置POM.xml並獲得所需的依賴關係。Dal層完成。我面臨兩個問題1.如何查詢,因爲我需要從多個列中提取數據家庭.2)如何查詢索引查詢的列 –

回答

0

對於JPA合規性,我已經使用昆德拉,我可以非常容易地將其與春天整合,是的,正如Hardik Bhalani所建議的柱子家族經過精心設計以達到最高效率

1

對第一個問題的回答:您必須對數據模型進行設計和規範化,以便減少多個列系列之間的遍歷。對於例如如果你在CF itemlist中存儲了一些用戶ID,你應該插入用戶的具有使用細節的JSON對象,而不是該用戶ID,通過這種方式在獲取遍歷到usermaster CF時可以避免

+0

您正在回答哪個問題?你的建議是否有助於建立Spring-Cassandra-Hector或者是否與JPA有關。我還沒有與JPA和Spring-Hector-Cassandra合作過。 – Crowie

+1

我的答案指向「我怎樣才能查詢,因爲我需要從多個列家族中提取數據」 我的解決方案是嘗試設計數據模型,以便它需要較少的依​​賴關係,如我的示例 –

+0

以及我現在用我的代碼進入生產。我使用Kundera + SPrings.Yes,正如Hardik Bhalani所建議的,柱家族設計得非常仔細,以達到最高效率。 –

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(與組件註解)的一部分,所以一旦應用程序部署創建連接池。如您所見,我正在發起連接事件(使用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(); 

我希望這有助於。

0

您可以嘗試使用Playorm,它支持兩個列家族的SQL一樣的連接2.也爲列提供索引支持。