如何将这个mongodb集合排成cassandra supercolumnfamily / columnfamily

时间:2014-07-25 21:40:29

标签: cassandra

我是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的真正区别,只是不是用简单的例子而是用一个真实的例子吗?

谢谢!

1 个答案:

答案 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, 卡罗