Как создать таблицу для системы подсчета очков в Cassandra

#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