Модель данных Cassandra для запроса столбца с неуникальными значениями

Я пытаюсь придумать модель данных, которая подходит для моей ситуации. У меня есть следующие столбцы: runid, stat1, stat2, stat3.

Я буду запрашивать на основе runid (например, select * from table, где runid = 123), но runid будет иметь повторяющиеся значения, поэтому я не могу просто сделать его первичным ключом. Кроме того, при запросе я ничего не знаю о stat1-3, поэтому я также не могу сделать эти столбцы частью первичного ключа.

(Предыстория: мой экземпляр Cassandra заполнен другой программой, и моя программа просто извлечет из нее информацию, относящуюся к конкретному runid, и отобразит ее на экране)

Это кажется достаточно распространенным сценарием, но я новичок в Кассандре. Я знаю, что runid должен быть частью первичного ключа, так как я должен запускать запросы на его основе, но он имеет повторяющиеся значения.

Какие-либо предложения?


person user3376961    schedule 17.07.2015    source источник


Ответы (1)


Вы правы, полагая, что это достаточно распространенный сценарий, и, к счастью, вам не нужно знать полный первичный ключ, чтобы делать запросы! Просто ключ раздела (первая часть первичного ключа требуется в ваших критериях выбора.

Например, если вы создадите свою таблицу следующим образом:

CREATE TABLE test.runs (
    stat1 text,
    stat2 text,
    stat3 text,
    runid int,
    PRIMARY KEY (runid, stat1)
 );

Вы должны иметь возможность получать данные, просто указав ключ раздела (runid):

cassandra@cqlsh:test> insert into runs (runid, stat1, stat2, stat3) values (0, '1', 'hi', 'hi'); 
cassandra@cqlsh:test> insert into runs (runid, stat1, stat2, stat3) values (0, '2', 'lo', 'lo');
cassandra@cqlsh:test> insert into runs (runid, stat1, stat2, stat3) values (0, '3', 'yo', 'yo');
cassandra@cqlsh:test> insert into runs (runid, stat1, stat2, stat3) values (1, '1', '22', '33');
cassandra@cqlsh:test> select * from runs where runid = 0;

 runid | stat1 | stat2 | stat3
-------+-------+-------+-------
     0 |     1 |    hi |    hi
     0 |     2 |    lo |    lo
     0 |     3 |    yo |    yo

При этом, вероятно, было бы хорошо придумать лучшее вторичное значение для вашего первичного ключа, чтобы позволить нескольким столбцам stat1 иметь одно и то же значение в пределах runid, может быть, случайный uuid для создания некоторого уникального значения?

person Andy Tolbert    schedule 17.07.2015