簡體   English   中英

為什么Cassandra的超級專欄不再受青睞?

[英]Why are super columns in Cassandra no longer favoured?

我在最新版本中讀到,由於“性能問題”,超級列不可取,但沒有解釋的地方。

然后我讀了這篇文章,這些文章使用超級列提供了精彩的索引模式。

這讓我不知道目前在Cassandra做索引的最佳方法是什么。

  1. 超級列的性能問題是什么?
  2. 我在哪里可以找到當前的索引編制最佳實踐?

超級列存在許多問題,其中最重要的是Cassandra在查詢時需要對超級列的所有子列進行反序列化(即使結果只返回一個小子集)。 結果,在性能受損之前可以存儲的每個超級列的子列數存在實際限制。

理論上,這可以通過適當地索引子列在Cassandra中修復,但是共識是復合列是更好的解決方案,並且它們在沒有增加復雜性的情況下工作。

使用復合列的最簡單方法是利用CQL 3提供的抽象。 請考慮以下架構:

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

這里的用戶名是行鍵,但是我們使用了PRIMARY KEY定義,它創建了一個行鍵和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');

在幕后,Cassandra將存儲上面插入的數據,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM