Dlaczego super kolumny w Kasandrze nie są już faworyzowane?

Czytałem w najnowszym wydaniu, że super kolumny nie są pożądane ze względu na" problemy z wydajnością", ale nie ma gdzie to wyjaśnić.

Potem czytam artykuły takie jak ten , które dają wspaniałe wzorce indeksowania za pomocą super kolumn.

To sprawia, że nie mam pojęcia, co jest obecnie najlepszym sposobem na indeksowanie w Cassandrze.

  1. jakie są problemy z wydajnością super kolumn?
  2. Gdzie znajdę aktualny najlepszy praktyki indeksowania?
Author: IamIC, 2012-08-11

1 answers

Super kolumny cierpią z powodu wielu problemów, z których nie mniej ważne jest to, że Cassandra musi deserializować wszystkie kolumny super kolumny podczas zapytań (nawet jeśli wynik zwróci tylko mały podzbiór). W rezultacie istnieje praktyczny limit liczby kolumn na super kolumnę, które mogą być przechowywane przed pogorszeniem wydajności.

W teorii można to naprawić wewnątrz Cassandry poprzez odpowiednie indeksowanie kolumn, ale konsensus jest taki, że złożone kolumny są lepszym rozwiązaniem i działają bez dodatkowej złożoności.

Najprostszym sposobem wykorzystania kolumn kompozytowych jest wykorzystanie abstrakcji, którą zapewnia CQL 3. Rozważ następujący schemat:

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

Nazwa użytkownika jest tutaj kluczem row, ale użyliśmy definicji klucza podstawowego, która tworzy grupowanie klucza row i kolumny sent_at. Jest to ważne, ponieważ ma efekt indeksowania tego atrybutu.

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');

Behind the scenes Cassandra będzie przechowywać powyższe wstawione dane w następujący sposób:

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

Ale używając CQL 3, możemy odpytywać "wiersz" używając predykatu sent_at i uzyskać z powrotem tabelaryczny zestaw wyników.

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
 31
Author: jericevans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-08 18:38:10