2016-05-04 2 views
0

Я пытаюсь хранить & извлекать данные в Кассандре следующим образом:таймсерий в Кассандре

Хранение данных: Я создал таблицу следующим образом:

CREATE TABLE mydata (
    myKey TEXT, 
    datetime TIMESTAMP, 
    value TEXT, 
    PRIMARY KEY (myKey,datetime) 
); 

Где я бы сохранил ценность за каждую минуту за последние 5 лет. Таким образом, он хранит 1440 * 365 * 5 = 2628000 записей/столбцов на строку (myKey как строка).

INSERT INTO mydata(myKey, datetime, value) VALUES ('1234ABCD','2013-04-03 07:01:00','72F'); 
INSERT INTO mydata(myKey, datetime, value) VALUES ('1234ABCD','2013-04-03 07:02:00','72F'); 
INSERT INTO mydata(myKey, datetime, value) VALUES ('1234ABCD','2013-04-03 07:03:00','72F'); 

.................

Я могу хранить данные и все отлично. Тем не менее, я хотел бы знать, если это эффективный способ делать (хранить) данные по горизонтали (2628000 значений для каждого ключа для 1 миллиона таких ключей вообще)?

Получение данных:

После сохранения данных в формате выше, я могу выбрать данные с помощью простого запроса на выборку в течение периода. Ex:

SELECT * 
FROM mydata 
WHERE myKey='1234ABCD' AND datetime > '2013-04-03 07:01:00' AND datetime < '2013-04-03 07:04:00'; 

Запрос работает отлично, и я получаю результат, как и ожидалось.

Однако мой вопрос:

  1. Как я могу выбрать только те значения, в определенные промежутки времени. Например, если я запрашиваю данные за день, я получаю 1440 значений (1 за каждую минуту). Я хотел бы получать значения каждые 10 минут (значение на каждых 10-й минуте), ограничивая число. от значений до 144.
  2. Есть ли способ запросить таблицу, если мы используем вышеупомянутую стратегию хранения?
  3. Если нет, то каковы возможные варианты удовлетворения моих требований по запросам данных с определенным интервалом, например, 1 минута, 10 минут, 1 час, 1 день и т. Д.?

Оцените любые другие предложения.

+0

не уверен, что я понимаю, что вы хотите запросить.вам нужны результаты от всего ключа за данный интервал? – Whitefret

+0

Если я использую следующий запрос, я ожидаю 144 значения (значение каждые 10 минут) вместо 1440 (значение каждые 1 минута). Как я могу выполнить запрос или как моделировать? SELECT * FROM mydata WHERE myKey = '1234ABCD' AND datetime> '2013-04-03 07:01:00' И datetime <'2013-04-04 07:01:00'; Я запрашиваю 24 часа для определенного ключа. – Mohan

+0

Вы ожидаете какого-либо диапазона или всего лишь десятую часть? – Whitefret

ответ

2

Нет, это не так, в будущем вы столкнетесь с проблемой, потому что в строке строки мы можем хранить только 2 миллиарда записей или столбцов. После этого он не даст ошибку, но также сохранит данные. Для вашей задачи отметьте временную метку столбца в год, месяц, день и время. , как 2016, 04, 04 и 15:03:00. Также введите год, месяц, день в раздел.

0

Вам определенно необходимо связать свой раздел с модульной версией метки времени. Но гранулярность действительно зависит от ваших чтений.

Если вы в основном будете читать в день, то использовать что-то вроде этого PK ((MYKEY, ггггммдд), время)

Если в основном недели PK ((MyKey, yyyyww), время), или месяц. ..

Проблема заключается в том, что если вы хотите читать значения в течение целого года, то вам лучше иметь раздел в неделю или месяц, или даже год будет я думаю, если вы не делаете никаких удалений, ваш раздел размер должен быть меньше 100 МБ

+0

Спасибо за ваш ответ. Размер строки будет фиксированным и не увеличится. Продолжительность в моем запросе может быть часами, днями, неделями, месяцами, годом и т. Д. Я хочу ограничить число. значений, возвращаемых запросом, на фиксированное число (скажем, 100) для любого запроса времени i. Для примера: если я запрашиваю данные дня, я получаю 1440 записей. Если я хочу ограничить до 100, мне, вероятно, понадобится значение каждые 15 минут (значение означает каждую 15-ю минуту, что означает значение в каждом 15-м столбце). Действительно ли это возможно? Если нет, то каков наилучший способ моделирования для этого требования. – Mohan

+0

Я не думаю, что вы можете точно ограничить количество результатов запроса так, как вы хотите. –

+0

Я бы создал аналогичную таблицу PK ((mykey, yyyymm), type, time), где type является целым числом, например, 10min - это тип 10, значение 15min - тип 15 и т. Д. Таким образом, вы можете выбрать те конкретные значения, это было бы подходящим? –

Смежные вопросы