Лучшие практики моделирования данных Cassandra рекомендуют не использовать коллекции (список, набор, карту) для хранения большого объема данных. Причина в том, что при загрузке строки CQL (SELECT ... WHERE id=xxx) сервер Cassandra должен загрузить всю коллекцию в память.
Теперь, чтобы ответить на ваши вопросы:
- Может ли кто-нибудь предложить правильный способ решения этой проблемы?
Использование вторичного индекса для извлечения огромного набора данных (19 миллионов) — не лучший подход к вашей проблеме.
Если ваше требование: дайте мне весь список, который содержит элемент, следующие схемы могут быть более подходящими.
Решение 1. Денормализация вручную
CREATE TABLE base_table(
id text,
key int,
value timestamp,
PRIMARY KEY(id, key)
);
CREATE TABLE denormalized_table_for_searching(
key int,
id text
value timestamp,
PRIMARY KEY(key, id));
// Give me all couples (id,value) where key = xxx
// Use iterator to fetch data by page and not load 19 millions row at once !!
SELECT * FROM denormalized_table_for_searching WHERE key=xxx;
Решение 2: автоматическая денормализация с помощью материализованных представлений Cassandra 3.0
CREATE TABLE base_table(
id text,
key int,
value timestamp,
PRIMARY KEY(id, key)
);
CREATE MATERIALIZED VIEW denormalized_table_for_searching
AS SELECT * FROM base_table
WHERE id IS NOT NULL AND key IS NOT NULL
PRIMARY KEY(key, id);
// Give me all couples (id,value) where key = xxx
// Use iterator to fetch data by page and not load 19 millions row at once !!
SELECT * FROM denormalized_table_for_searching WHERE key=xxx;
- есть ли альтернатива для такого рода проблемы?
См. ответ для пункта 1. выше :)
person
doanduyhai
schedule
13.01.2016
desc table
и что вы пытаетесь получить. - person undefined_variable   schedule 13.01.2016