【问题标题】:How to Design a Table for scoring system in Cassandra如何在 Cassandra 中设计评分系统表
【发布时间】:2021-03-28 12:18:44
【问题描述】:

我在 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;

我需要按分数顺序获取产品但是如您所知,如果没有分数作为主键就无法排序但是如果我将分数放在主键中,将无法更新它有什么解决方案?

【问题讨论】:

    标签: database cassandra nosql cassandra-3.0


    【解决方案1】:

    解决方案是有两个表来满足您的要求。例如第二个表可以是

    CREATE TABLE products_score
    (
        product_name varchar,
        score    int,
        primary key (product_name, score)
    );
    

    因此您在编写时填充并使用第二个按分数排序

    【讨论】:

    • 我的需要是有一个得分最高的产品列表和他们的卖家。例如,一个移动产品可能有数千个卖家,每个卖家都收到了自己对该产品的评分。
    • 例如:第 1 行 -> product_name: iphone7- Seller_name: jack- score: 5 / row 2 -> product_name: iphone7- Seller_name:alex - score:2
    • 然后您将卖家名称添加到索引中。主键(product_name、score、seller_name)。在那里你可以这样查询: select * from table where product_name = 'x' order by score DESC, Seller_name DESC
    猜你喜欢
    • 2011-08-06
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2014-07-12
    • 1970-01-01
    • 2023-03-10
    • 2012-07-26
    相关资源
    最近更新 更多