Cassandra中的一对多映射Ecomerce数据模式

问题描述

我是cassandra db的新手,我正在制作简单的电子商务模式。在关系世界中,我们遵循以下模式 类别表(ID,名称), 产品表(id,categoryId,名称,价格,折扣价)

所以在cassandra中,如果我有以下查询,该如何为我的数据建模

  1. 选择所有类别;
  2. 选择所有产品;
  3. 选择具有类别名称的特定产品
  4. 选择特定类别的产品

如果我更新类别名称,是否会影响所有表格?

解决方法

这是一个可能的数据模型:

CREATE TABLE categories (
    category_id text,category_name text,...
    PRIMARY KEY (category_id)
)

CREATE TABLE products (
    product_id text,category_id text,product_name text,price decimal,discounted_price decimal,PRIMARY KEY (product_id)
)

CREATE TABLE products_by_category (
    category_id text,product_id text,PRIMARY KEY ((category_id),product_id)
)

要获取类别列表:

SELECT category_name FROM categories

这是一个全表扫描,除非您有数百个类别,否则应该没问题。

要获取产品列表:

SELECT product_name FROM products

如上所述,这也是一个全表扫描,如果您有成千上万的产品和/或大型集群,这将是一个问题。

要选择具有类别名称的特定产品:

SELECT product_name,category_name FROM products WHERE product_id = ?

要获取某个类别的产品列表:

SELECT category_name,product_name FROM products_by_category WHERE category_id = ?

干杯!