Cassandra和关系数据库设计上的区别

46 篇文章 0 订阅

让我们花一分钟时间强调一下为Cassandra和关系数据库进行ata建模的一些关键区别。

没有joins

不能在Cassandra中执行连接。如果您已经设计了一个数据模型,并且发现需要连接之类的东西,那么您必须在客户端完成这项工作,或者创建一个非规范化的第二个表来代表连接结果。在Cassandra数据建模中,后一种选择是首选的。在客户端执行连接应该是非常罕见的情况;你真的想复制(去规范化)数据。

无引用完整性

尽管Cassandra支持轻量级事务和批处理等功能,但Cassandra本身并没有跨表引用完整性的概念。在关系数据库中,可以在一个表中指定外键,以引用另一个表中记录的主键。但Cassandra并没有强制执行这一点。在表中存储与其他实体相关的ID仍然是常见的设计要求,但级联删除等操作不可用

非规范化

在关系数据库设计中,经常会教给您规范化的重要性。在使用Cassandra时,这不是一个优势,因为当数据模型非规范化时,它的性能最好。通常情况下,公司最终也会对关系数据库中的数据进行非规范化。这有两个常见的原因。一是性能。当公司不得不对多年的数据进行如此多的连接时,他们根本无法获得所需的性能,因此他们按照已知查询的路线进行非规范化。这最终会起作用,但与关系数据库的设计意图背道而驰,最终会产生一个问题:在这些情况下,使用关系数据库是否是最佳方法。

关系数据库有意去规范化的第二个原因是需要保留的业务文档结构。也就是说,您有一个封闭表,它引用了许多外部表,这些表的数据可能会随着时间的推移而变化,但您需要将封闭文档作为快照保存在历史记录中。这里常见的例子是发票。你已经有了客户表和产品表,你会认为你可以根据这些表开一张发票。但在实践中永远不应该这样做。客户或价格信息可能会更改,然后您将失去发票日期时发票文档的完整性,这可能违反审计、报告或法律,并导致其他问题。

在关系世界中,非规范化违反了Codd的规范形式,您试图避免它。但在卡桑德拉,反规范化是完全正常的。如果您的数据模型很简单,则不需要它。但不要害怕。

历史上,Cassandra中的非规范化要求使用本文档中描述的技术设计和管理多个表。从3.0版本开始,Cassandra提供了一个称为物化视图<物化视图>的功能,允许您基于基表设计创建多个非规范化的数据视图。Cassandra管理服务器上的物化视图,包括保持视图与表同步的工作。

10分钟带你操作Cassandra数据库(查改增删)  JAVA 语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值