卡桑德拉的列太多了

时间:2018-01-30 10:39:22

标签: apache cassandra cassandra-3.0

我在Cassandra的桌子上有20列。在执行

时是否会对性能产生影响
select * from table where partitionKey = 'test';

我无法从这个链接中理解,

https://wiki.apache.org/cassandra/CassandraLimitations

1)在Cassandra表格中有太多列(比如说20个)的后果是什么?

谢谢, 哈利

1 个答案:

答案 0 :(得分:3)

除非分区上有很多行,否则我看不到有20列的影响。如您链接的文档中所述:

  

单个分区中的最大单元数(行x列)为20亿。

因此,除非您希望在一个分区中拥有超过1亿行,否则我不明白为什么20列会成为问题。请记住,Cassandra是一家专栏店。这个名称意味着Cassandra可以为每个分区存储大量列。

话虽如此,我个人建议每个分区不要超过100 MB。在维修过程中,它可能会给您带来问题。

===============================

回答你的评论。请记住,Cassandra中的分区和行是两个不同的东西。如果没有聚类列,则分区仅等于一行。例如,看看这个表创建和我们插入的值,然后看看sstabledump:

create TABLE tt2 ( foo int , bar int , mar int , PRIMARY KEY (foo , bar )) ;
insert INTO tt2 (foo , bar , mar ) VALUES ( 1, 2, 3) ;
insert INTO tt2 (foo , bar , mar ) VALUES ( 1, 3, 4) ;

sstabledump:

./cassandra/tools/bin/sstabledump ~/cassandra/data/data/tk/tt2-1386f69005bd11e89c0bbfb5c1157523/mc-1-big-Data.db 
[
  {
    "partition" : {
      "key" : [ "1" ],
      "position" : 0
    },
    "rows" : [
      {
        "type" : "row",
        "position" : 32,
        "clustering" : [ "2" ],
        "liveness_info" : { "tstamp" : "2018-01-30T12:57:36.362483Z" },
        "cells" : [
          { "name" : "mar", "value" : 3 }
        ]
      },
      {
        "type" : "row",
        "position" : 32,
        "clustering" : [ "3" ],
        "liveness_info" : { "tstamp" : "2018-01-30T12:58:03.538482Z" },
        "cells" : [
          { "name" : "mar", "value" : 4 }
        ]
      }
    ]
  }
]

此外,如果您使用-d选项,则可以更轻松地查看内部表示。如您所见,对于同一分区,我们有2个不同的行:

./cassandra/tools/bin/sstabledump -d ~/cassandra/data/data/tk/tt2-1386f69005bd11e89c0bbfb5c1157523/mc-1-big-Data.db 
[1]@0 Row[info=[ts=1517317056362483] ]: 2 | [mar=3 ts=1517317056362483]
[1]@32 Row[info=[ts=1517317083538482] ]: 3 | [mar=4 ts=1517317083538482]
相关问题