首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于产品ID管理的Cassandra设计

用于产品ID管理的Cassandra设计
EN

Stack Overflow用户
提问于 2011-04-28 16:59:00
回答 1查看 253关注 0票数 0

我是Cassandra的新手,想开始尝试一个简单的测试

我们使用传统RDBMS的数据模型如下

表Company (Id,Name)

表Product ( ID,Name,Company ID),其中Company ID为FK,参照Company表

表ProductInstance (Id,ProductID),其中ProductID是对产品表的FK引用

表ProductInstanceRating (Id,ProductInstanceID,Comment),其中ProductInstanceID是对ProductInstance表的FK引用

对Cassandra的设计有什么建议吗?

更新:

我试着从查询的角度来看

要捕获的数据

1)产品引用是由产品名称、产品批号和客户ID组成的复合键产品名称: 12456产品批号: PQ23客户ID : 879456

则唯一的产品参考将类似于12456|PQ23|879456

2)产品实例将是上述产品的每个实例的唯一哈希号集合

并且该产品的每个实例将获得唯一的编号784A、876T等,并且该编号对于特定的产品参考将是唯一的

产品实例参考将类似于12456|PQ23|879456|784A

3)每个产品唯一编号可以获得1个以上的评级

在这种情况下,查询将如下所示

Query1)为了添加/插入产品实例的评级;获取产品的行,即12456|PQ23|879456

Query2)获取此行中的ProductInstance ID (可能是列族的名称)

Query3)将评级信息添加为列:值对

设计应该是这样的吗?

代码语言:javascript
复制
12456|PQ23|879456 {
      784A{timestamp1:{rating:valueA
                      person name:valueX}
           timestamp2:{rating:valueB
                      person name:valueY}}

      876T{timestamp1:{rating:valueC
                      person name:valueX}
           timestamp2:{rating:valueB
                      person name:valueY}}
}

此后,我们希望:

Query4)获取所有有实例的产品

Query5)获取所有具有评级的产品实例

Query6)获得产品的最高评级

Query7)获取产品的平均评级

有没有更好、更有效的方法来实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2011-04-29 16:52:36

在Cassandra中,您需要考虑希望运行哪些查询(与RDBMS不同,在RDBMS中,您可以为域建立一个相当抽象的模型,然后设计SQL查询),因为您只能执行行键查找或使用相当有限的二级索引。任何其他索引都需要在列族中显式创建。

出于这个原因,去规范化是很常见的。然而,维护数据可能会更加困难,因为在Cassandra中没有级联删除等。

一种候选结构可能是使用ProductInstance列族来存储评级,然后使用product列族作为索引来查找给定产品的实例,最后使用company列族作为索引来查找特定公司的产品。或者,您可以将公司作为Product列系列中的一列进行非规范化处理。

重复一遍,只有当您知道您希望支持哪些查询时,才能确定您的“正确”结构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5816135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档