У меня есть огромная таблица с сотнями миллиардов записей, и я хочу добавить в эту таблицу поле, одно и то же значение которого будет повторяться для миллионов записей. Я не знаю, как эффективно смоделировать это в кассандре. Позвольте мне уточнить:
У меня есть общая таблица:
CREATE TABLE readings (
key int,
key2 int,
time timestamp,
name text,
PRIMARY KEY ((key, key2) time)
)
Эта таблица содержит более 700 000 000 записей. Я хочу создать в этой таблице поле с именем source
. В этом поле указано, откуда была получена запись (поскольку программа имеет множество способов получения информации о таблице reading
). Одно возможное значение для этого поля — "XML: path\to\file.xml"
или "Direct import from the X database"
или даже "Manually added"
. Я хочу, чтобы это было описательное поле, используемое исключительно для последующего обслуживания в базе данных, где мы хотим манипулировать только записями из данного источника.
Запросы, которые я хочу запустить, которые я не могу сейчас выполнить:
- Какие записи в таблице
readings
были получены из данного источника? - Каков источник данной записи?
Решением для меня было бы создать таблицу, например:
CREATE TABLE readings_per_source(
source text,
key int,
key2 int,
time timestamp,
PRIMARY KEY (source, key, key2, time)
)
что позволило бы мне выполнить первый запрос, но также означало бы, что я создал бы 700 000 000+ новых записей в моей базе данных с большим количеством информации, что заняло бы много ненужного места для хранения, поскольку десятки миллионов этих записей были бы имеют такое же значение для source
.
Если бы это была реляционная среда, я бы создал поле source_id
в таблице readings
и таблицу source
с полями id (PK)
и name
, что означало бы сохранение только дополнительного целого числа для каждой строки в таблице readings
и новую таблицу с таким же количеством записей. так как разные источники были.
Как можно смоделировать это в cassandra?