为什么在卡桑德拉超列不再青睐?(Why are super columns in Cassandra

2019-06-26 23:20发布

我已经在最新版本中读取超列是不可取的,由于“性能问题”,但没有这哪里是解释。

然后我读如文章这一次 ,让使用超级列索引奇妙的图案。

这让我不知道的什么是目前做索引中卡桑德拉的最佳途径。

  1. 什么是超列的性能问题?
  2. 我在哪里可以找到索引目前的最佳做法?

Answer 1:

超级列从众多的问题,而不是其中最重要的是,它是必要的卡桑德拉到deserialze所有查询时(即使结果只会返回一个小的子集)超列的子栏目的困扰。 其结果是,有一个实际的限制性能会受到影响之前可以存储在每个超级列子列数。

从理论上讲,这可以通过适当的分度子栏目固定卡珊德拉之内,但共识是,复合列是一个更好的解决方案,他们不增加复杂性的工作。

利用组合柱的最简单的方法是采取的是抽象的优势CQL 3提供。 考虑以下方案:

CREATE TABLE messages(
    username text,
    sent_at timestamp,
    message text,
    sender text,
    PRIMARY KEY(username, sent_at)
);

在这里用户名是该行关键,但我们使用它创建的行键和sent_at列进行分组主键定义。 这一点很重要,因为它有索引的该属性的效果。

INSERT INTO messages (username, sent_at, message, sender) VALUES ('bob', '2012-08-01 11:42:15', 'Hi', 'alice');
INSERT INTO messages (username, sent_at, message, sender) VALUES ('alice', '2012-08-01 11:42:37', 'Hi yourself', 'bob');
INSERT INTO messages (username, sent_at, message, sender) VALUES ('bob', '2012-08-01 11:43:00', 'What are you doing later?', 'alice');
INSERT INTO messages (username, sent_at, message, sender) VALUES ('bob', '2012-08-01 11:47:14', 'Bob?', 'alice');

幕后卡桑德拉将存储上述插入的数据是这样的:

alice: (2012-08-01 11:42:37,message): Hi yourself, (2012-08-01 11:42:37,sender): bob
bob:   (2012-08-01 11:42:15,message): Hi,          (2012-08-01 11:42:15,sender): alice, (2012-08-01 11:43:00,message): What are you doing later?, (2012-08-01 11:43:00,sender): alice (2012-08-01 11:47:14,message): Bob?, (2012-08-01 11:47:14,sender): alice

但是,使用CQL 3,我们可以查询“行”使用sent_at谓词,并得到一个表格结果集。

SELECT * FROM messages WHERE username = 'bob' AND sent_at > '2012-08-01';
 username | sent_at                  | message                   | sender
----------+--------------------------+---------------------------+--------
      bob | 2012-08-01 11:43:00+0000 | What are you doing later? |  alice
      bob | 2012-08-01 11:47:14+0000 |                      Bob? |  alice


文章来源: Why are super columns in Cassandra no longer favoured?