Извините, если это дубликат, я нашел несколько вопросов о временных диапазонах здесь, но мой случай кажется немного другим и еще не обсуждался.Запросы Ranges (интервалы) в Cassandra DB - CQL
Я хотел бы хранить довольно большие куски (бункера) данных (BLOB - 2-4Mb, это «черный ящик данные», я не могу изменить его расположение), чтобы получить доступ с интервальными ключами:
...
primary key (bin_id int, from_item_id int, to_item_id int)
...
с возможностью выбора с элементами диапазонов, как в этом псевдокоде, чтобы выбрать все куски, которые содержат интервал элементов [110, 200]:
select chunk from tb1 where chunk_id = 100500 and from_item_id >= 110 and to_item_id <= 200;
Попытка запустить такой запрос напрямую с ошибкой:
code=2200 [Invalid query] message="PRIMARY KEY column "to_item_id" cannot be restricted (preceding column "from_item_id" is restricted by a non-EQ relation)"
В настоящее время единственное решение я нашел осуществить дополнительную таблицу (tb_map) с обратным отображением из item_id в bin_id и использовать выбор, чтобы сделать запрос выглядит примерно так:
...
– in tb_map
primary key (dummy_id, item_id)
...
select bin_id from tb_map where dummy_id = SOME_MAGIK and item_id >= 110 and item_id <= 200;
И затем использовать bin_id извлекать куски из ТВ1 с эквалайзером или IN оператора, как здесь:
select * from tb1 where bin_id in (...);
Но я не могу использовать эти проблемы производительности модель из-за вставки (приложение следует избегать много вставок дополнительной таблицы и следует избегать м требующие дополнительных структур данных, но должны быть «такими же простыми, как гвоздь»).
Это простое решение остаться в пределах одного стола (или нескольких простых таблиц)? Я не задумываюсь о том, как моделировать такое поведение в C * (может быть, нужно использовать срезы?), Могут ли локальные C * гуру давать какие-либо подсказки?
Я использую CQL 3.1
Возможный дубликат http://stackoverflow.com/questions/28565470/cassandra-primary-key-column-cannot-be-restricted – TheGeorgeous