2012-06-25 46 views
4

我有,我需要我的数据库存储以下数据的要求:卡桑德拉:柱族VS超级柱族

- 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阅读,使用超级列家族的气馁。我想知道是否有更好的方法为我的需求创建模型。

PS,我从你链接到正确以下article

回答

6

的StackOverflow的答案借用JSONish符号。您不应该在新应用程序中使用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

+0

有没有办法通过卡桑德拉 - CLI创建这样的列? –

+0

不幸的是没有。您可以使用许多客户端库中的一个,通过api来完成。你也可以使用新的CQL接口和cqlsh命令行工具。 CQLv3实际上会抽象出你正在使用组合列的事实。 CQLv3还在测试阶段。更多信息:http://www.datastax.com/dev/blog/whats-new-in-cql-3-0 – nickmbailey