2012-03-30 81 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