2013-05-31 87 views
1

我正在使用Cassandra和Astyanax客戶端的Spring Web應用程序中工作。我想將從Cassandra查詢檢索到的結果數據轉換爲POJO,但我不知道哪個庫或Astyanax API支持這一點。
例如,我有User列家族(CF)與一些基本屬性(username, password, email)和其他相關的附加信息可以添加到此CF.然後,我用OperationResult>來保存數據讀取從CF一個用戶返回行,像這樣:使用Astyanax將Cassandra查詢結果轉換爲POJO

OperationResult<ColumnList<String>> columns = getKeyspace().prepareQuery(getColumnFamily()).getRow(rowKey).execute(); 

我想要做的是旁邊填充「列」我User對象。在這裏,我有2個問題,你能幫我解決這個問題:

1 /什麼是User類的最佳結構來保存從用戶CF檢索相應的數據?我的建議是:

public class User { 
    String userName, password, email; // Basic properties 
    Map<String, Object> additionalInfo; 
} 

2 /如何可以通過使用通用方法(以便它可以被施加到已經被映射每一個CF POJO)的卡桑德拉數據轉換成這POJO?
如果在我的問題中存在一些愚蠢的虛擬事物,我非常抱歉,因爲我剛剛接觸了NoSQL概念和Cassandra以及Astyanax兩週。
非常感謝您的幫助。

回答

2

您可以嘗試阿喀琉斯:https://github.com/doanduyhai/achilles,一個JPA兼容的實體管理卡桑德拉

現在存在通過使用赫克託節儉API的完整實現。

使用Datastax Java Driver的CQL3實施正在進行中。測試版將在幾個月內發佈(2013年7月 - 8月)

CQL3很棒,但它仍然太低,因爲您需要自己從ResultSet中提取數據。這就像回到只有JDBC模板可用的時候。

阿基里斯在那裏填補空白。

0

我建議你使用像Playorm這樣的庫,使用它可以輕鬆地在你的實體上執行CRUD操作。見this一個例子,你如何創建一個用戶對象,然後你可以通過

User user1 = mgr.find(User.class, email); 

假設電子郵件是您NoSqlId(在卡桑德拉的主鍵或行鍵)輕鬆獲得POJO。

+0

謝謝你的評論@Easility。但是我已經建立了Astyanax的DAO層,並將其分解爲服務。 PlayORM看起來像Cassandra的另一位客戶,不是嗎?改變另一個目標可能需要很長時間。還有其他庫(不是Cassandra客戶端)支持這種數據轉換嗎? –

+0

是的,Playorm是另一個客戶端,它在內部使用Astyanax作爲Cassandra驅動程序。但它與Cassandra交互的方式並不需要太多時間,因爲它使用緩存等。 – Easility

0

爲此,我使用com.netflix.astyanax.mapping.Mapping和com.netflix.astyanax.mapping.MappingCache。