【问题标题】:Cassandra: Column Family vs Super Column FamilyCassandra:列族与超级列族
【发布时间】:2012-06-25 22:41:39
【问题描述】:

我有一个要求,我需要我的数据库来存储以下数据:

- For each build, store the results of 3 performance runs. The result includes tps and latency. 

阅读 cassandra 数据模型,这直接映射到以下格式的超级列族:

BenchmarkSuperColumnFamily= {

build_1: {
   Run1: {1000K, 0.5ms}
   Run2: {1000K, 0.5ms}
   Run3: {1000K, 0.5ms}
}

build_2: {
   Run1: {1000K, 0.5ms}
   Run2: {1000K, 0.5ms}
   Run3: {1000K, 0.5ms}
}
...

}

但是,我在下面的answer 中读到不鼓励使用 Super Column 系列。我想知道是否有更好的方法来为我的需求创建模型。

PS,我从以下article借用了JSONish表示法

【问题讨论】:

    标签: database-design nosql cassandra


    【解决方案1】:

    您链接到的 StackOverflow 答案是正确的。您不应该在新应用程序中使用 SuperColumns。然而,它们的存在是为了向后兼容。

    一般来说,复合列可用于模拟超级列提供的任何模型。基本上,它们允许您将列名分成多个部分。因此,如果您要指定“CompositeType(UTF8Type, UTF8Type)”的比较器,您的数据模型最终会如下所示:

    BenchmarkColumnFamily= {
    
       build_1: {
           (Run1, TPS) : 1000K
           (Run1, Latency) : 0.5ms
           (Run2, TPS) : 1000K
           (Run2, Latency) : 0.5ms
           (Run3, TPS) : 1000K
           (Run3, Latency) : 0.5ms
        }
    
        build_2: {
           ...
        }
    ...
    
    }
    

    使用上述模型,您可以使用单个查询来获取单次运行的单个数据点、单次运行的所有数据点或多次运行的所有数据点。

    关于复合列的更多信息: http://www.datastax.com/dev/blog/introduction-to-composite-columns-part-1

    【讨论】:

    • 有没有办法通过 cassandra-cli 创建这样的列?
    • 很遗憾没有。您可以使用众多客户端库之一通过 api 来完成。您也可以使用较新的 CQL 界面和 cqlsh 命令行工具来完成。 CQLv3 实际上将抽象出您正在使用复合列的事实。 CQLv3 还处于测试阶段。更多信息:datastax.com/dev/blog/whats-new-in-cql-3-0
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2020-05-28
    相关资源
    最近更新 更多