#database #cassandra #nosql #cassandra-3.0
#База данных #cassandra #nosql #cassandra-3.0
Вопрос:
У меня есть таблица для моих продуктов в Cassandra. В этой таблице я сохраняю название продукта и имя продавца (может быть тысячи продавцов) и оценку (оценка продукта продавца) следующим образом
CREATE TABLE products
(
product_name varchar,
seller_name varchar,
score int,
primary key (product_name, seller_name)
);
Мне нужно обновить оценку в моем коде
UPDATE products SET score = 2 WHERE product_name = "iphone-7" AND seller_name = "jack" ;
Все в порядке, кроме запроса выбора:
SELECT * FROM products WHERE product_name = "iphone-7" ORDER BY SCORE DESC;
Мне нужно получить продукты по порядку оценки, но, как вы знаете, невозможно отсортировать, если оценка не является первичным ключом, но если я помещу оценку в первичный ключ, обновить ее будет невозможно. какое решение?
Ответ №1:
Решение состоит в том, чтобы иметь две таблицы, соответствующие вашим требованиям. Например, вторая таблица может быть
CREATE TABLE products_score
(
product_name varchar,
score int,
primary key (product_name, score)
);
таким образом, вы заполняете как при записи, так и используете вторую для упорядочения по баллам
Комментарии:
1. Мне нужно иметь список продуктов с наибольшим количеством баллов и их продавцов. Например, может быть тысячи продавцов мобильного продукта, каждый продавец получил свой собственный балл за этот продукт.
2. например: строка 1 -> имя_продукта: iphone7- имя_продавца: джек- оценка: 5 / строка 2 -> имя_продукта: iphone7- имя_продавца: алекс — оценка: 2
3. затем вы добавляете имя_продавца в первичный ключ index. primary (имя_продукта, оценка, имя_продавца). там вы можете запросить следующим образом: выберите * из таблицы, где product_name = ‘x’ порядок по score DESC, seller_name DESC