2012-03-30 77 views
-1

如何在Cassandra中使用Hector API插入嵌套的超列(意味着超列中的超列)。下面是簡單的超級列的代碼,它工作正常。但我想在這添加一個超級列。插入嵌套超列

Mutator<String> mutator = HFactory.createMutator(keyspaceOperator, stringSerializer); 
List<HColumn<String,String>> colsList = new ArrayList<HColumn<String,String>>(); 
colsList.add(HFactory.createStringColumn("name", "tarun")); 
colsList.add(HFactory.createStringColumn("age", "25")); 
mutator.insert("deviceId", CF_SUPER, HFactory.createSuperColumn("10000", 
       colsList,stringSerializer, stringSerializer, stringSerializer)); 

回答

1

您不能在另一個超級列中放置超級列。您需要使用包含超級列集合的SuperColumnFamily。查看this偉大的文章,其中一位在Digg上設置Cassandra的人對數據模型進行了很好的解釋。

+0

我已經讀過這篇文章,並知道我們可以把超級欄放在另一個。但是我想通過Cassandra的Hector Java API來實現。 – 2012-03-30 11:47:10

+0

你知道嗎,如何使用hector添加超級列家族。 – 2012-03-30 13:34:01

+0

我對Hector圖書館並不熟悉 - 我使用Pelops並認爲它更容易理解 - 但是,一般來說,提前定義數據模型並在創建Column Family和Super Column系列啓動系統。我個人更喜歡腳本和命令行來做這件事,而不是試圖通過API。它將訪問問題與數據模型關注點分離開來,並使其易於維護。 – FloppyDisk 2012-03-30 15:46:42

3

您不能將SuperColumn放在Cassandra的另一個SuperColumn中。這不是Hector的限制,這只是Cassandra的實現方式。

當我第一次開始使用Cassandra時,我幾個小時閱讀了數據模型的文本描述,我的目光掠過,我沒有明白。然後我看到了一張圖片的表示,並立即對它進行了修整。檢查出來:http://www.javageneration.com/wp-content/uploads/2010/05/Cassandra_DataModel_CheatSheet.pdf

+0

請查看以下鏈接以瞭解有關cassandra數據模式的更多信息。 http://arin.me/blog/wtf-is-a-supercolumn-cassandra-data-model – 2012-04-06 10:09:09

+1

從你自己的鏈接:「一個SuperColumn是一個元組w /一個二進制名稱和一個值,這是一個包含無界的地圖列的數量 - 按列的名稱鍵入。「 要回答你原來的問題 - 你根本不能把一個超級柱子放在另一個超級柱子裏面。卡桑德拉只是不這樣做,所以赫克託當然也不這樣做。 – 2012-04-06 17:59:07