web-dev-qa-db-ja.com

なぜCassandraのスーパーカラムが推奨されなくなったのですか?

私は最新のリリースで「パフォーマンスの問題」のためにスーパーカラムは望ましくないことを読みましたが、これについてはどこにも説明していません。

次に、スーパー列を使用して素晴らしいインデックスパターンを提供する this one などの記事を読みました。

これにより、Cassandraで索引付けを行うための現在最良の方法がわかりません。

  1. スーパーカラムのパフォーマンスの問題は何ですか?
  2. currentインデックス作成のベストプラクティスはどこにありますか?
28
IamIC

スーパー列には多くの問題があります。特に問題があるのは、クエリ時にCassandraがスーパー列のすべてのサブ列を逆シリアル化する必要があることです(結果が結果として、パフォーマンスが低下する前に格納できるスーパー列ごとのサブ列の数には、実際的な制限があります。

理論的には、これはサブカラムに適切にインデックスを付けることでCassandra内で修正できますが、コンポジットカラムはより優れたソリューションであり、複雑さを増すことなく機能します。

複合列を使用する最も簡単な方法は、 CQL が提供する抽象化を利用することです。次のスキーマを検討してください。

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

ここでのユーザー名は行キーですが、行キーとsent_at列のグループを作成するPRIMARY KEY定義を使用しました。これは、その属性にインデックスを付ける効果があるため、重要です。

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
33
jericevans