Database Cassandra(Ecomerce数据模式)中的一对多映射
我是卡桑德拉数据库的新手,我正在制作简单的电子商务模式。在关系世界中,我们有如下模式 类别表(id、名称), 产品表(id、类别、名称、价格、折扣价) 因此,在cassandra中,如果我有以下查询,如何对数据建模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
如果我更新类别名称,它会影响所有表吗?这里有一个可能的数据模型:
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不提供事务机制,因此在多个表之间保持数据一致性可能是一个问题