我是Cassandra的新人。
我使用mongodb为一个项目工作,我发现使用RDBMS从不同年份学习非常简单。
现在我需要学习cassandra,这是以列为导向而非mongodb文档导向。
我读到了cassandra,我的思想仍然是面向文档的。
我需要将一个非常通用的mongodb行可能的架构表示为cassandra supercolumnfamily / columfamily:
{
"_id" : ObjectId("mongodb-autogenerated-id"),
key1 : "value1",
key2 : "value2",
...
keyN : "valueN",
keyN+1 : [{
//array or object or value
},{
//array or object or value
},
...
{
//array or object or value
}],
...
keyN+M : //array or object or value
}
有人能解释一下我与columnfamily和supercolumnfamily的真正区别,只是不是用简单的例子而是用一个真实的例子吗?
谢谢!
答案 0 :(得分:1)
由于性能原因(不仅仅是),不推荐使用Supercolumns。 在旧数据模型中,CF可以是Column类型或SuperColumn类型。 SuperColumn只不过是由密钥标识的列的集合。
因此,使用json
表示数据CF DATA
{
"RowKey": {"col1":"col1_val", "col2":"col2_val", .... "colX":"colX_val" }
}
在java中它应该是:
Map<String, Map<String, T>>
SCF数据
{
"RowKey": {
"sc1_key": {"col1":"col1_val", "col2":"col2_val", .... "colX":"colX_val" },
"sc2_key": {"col1":"col1_val", "col2":"col2_val", .... "colX":"colX_val" },
...
"scX_key": {"col1":"col1_val", "col2":"col2_val", .... "colX":"colX_val" },
}
在java中它应该是:
Map<String, Map<String, Map<String, T>>
但是SCF过去常常会驱动不良数据模型,即使您需要一小部分列,也必须对整个超级列进行反序列化。现在SuperColumns已被&#34;宽行&#34;取代,你可以使用复合主键来获取它们。
我对MongoDB知之甚少,只用了10分钟就可以了。 AFA您在mongo中的文档,如果我没有错,您可以使用文档中的任何键执行任何查询,您可以将它们与逻辑运算符组合等等。
在cassandra中,这是不可能的,您可以做的最好的事情是使用面向查询的数据模型&#34;,编写您在数据库上执行的所有可能的查询,并在此基础上为您的数据建模。
在this帖子中,您可以找到几个提示和数据建模的有用链接
HTH, 卡罗