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

Database Cassandra(Ecomerce数据模式)中的一对多映射,database,cassandra,nosql,data-modeling,Database,Cassandra,Nosql,Data Modeling,我是卡桑德拉数据库的新手,我正在制作简单的电子商务模式。在关系世界中,我们有如下模式 类别表(id、名称), 产品表(id、类别、名称、价格、折扣价) 因此,在cassandra中,如果我有以下查询,如何对数据建模 选择所有类别 选择所有产品 选择具有类别名称的特定产品 选择特定类别及其产品 如果我更新类别名称,它会影响所有表吗?这里有一个可能的数据模型: CREATE TABLE categories ( category_id text, category_name text

我是卡桑德拉数据库的新手,我正在制作简单的电子商务模式。在关系世界中,我们有如下模式 类别表(id、名称), 产品表(id、类别、名称、价格、折扣价)

因此,在cassandra中,如果我有以下查询,如何对数据建模

  • 选择所有类别
  • 选择所有产品
  • 选择具有类别名称的特定产品
  • 选择特定类别及其产品

  • 如果我更新类别名称,它会影响所有表吗?

    这里有一个可能的数据模型:

    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 = ?
    

    干杯

    若我更新了category表中的一个category名称呢?它会影响所有表吗?如果我在products表中更新一个产品名称,它会影响category表中的产品吗?是的,您必须使用BATCH语句来保持所有表的同步。干杯我不建议在您的用例中使用Cassandra,因为:-“全选”查询-Cassandra是一个分布式数据库,只有当您有查询标准(允许Cassandra定义数据放置的位置)时,它才能正常工作。对于分布式数据库,完全扫描查询不是一个好主意,因为它将涉及对所有节点的请求。-“更新”查询和关系数据。Cassndra不提供事务机制,因此在多个表之间保持数据一致性可能是一个问题