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



我是cassandra数据库的新手,我正在制作简单的电子商务模式。在关系世界中,我们有如下模式类别表(id,name(,产品表(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,
category_name text,
price decimal,
discounted_price decimal,
PRIMARY KEY (product_id)
)
CREATE TABLE products_by_category (
category_id text,
product_id text,
product_name text,
category_name 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 = ?

干杯!

最新更新