Проблема с следующем:
Имеется семейство колонок (таблица) где будут храниться blob-ы (считай файлы) размером в несколько десятков мегабайт.
CREATE TABLE files(
id UUID,
data BLOB,
created_at TIMESTAMP,
filename VARCHAR,
PRIMARY KEY(id)
);
Задача состоит в том, что бы получить количество записей и список записей из этой таблицы, не извлекая сами данные. Но если в эту таблицы загрузить данных на 2-3 гигабайта, то сама база начинает падать с OutOfMemeory при любых выборка из этой таблицы без фильтрации по первичному ключу.
Я понимаю, если бы база падала при
SELECT * FROM files
, но падает так же и при любых запросах, которые не включают колонку с данными (например
SELECT id, filename FROM files
и
SELECT count(1) FROM files
). Но при этом отлично работают запросы
SELECT * FROM files WHERE id=?
или
SELECT id, filename FROM files LIMIT 10
.
Единственное предположение, которое у меня возникает: cassandra сначала грузит строки целиком в память, а только потом отфильтровывает нужные поля. Но подтверждения этому этому я не нашёл в документации.
Собственно, верно ли моё утверждение? Или проблема в чём-то другом?
P.S. Проверял на "Cassandra 2.1.2", поставленную из официального репозитория (
debian.datastax.com/community). В настройках ("cassandra.yml") менял только значение "commitlog_segment_size_in_mb" c 32 на 128, что бы можно было вставить файлы больше 16-ти мегабайт.