全面比较非关系型数据库Cassandra与RDBMS的设计差别

Cassandra是一个混合型的非关系型数据库,是一个网络社交云计算方面理想的数据库。Cassandra的模型和查询方式与RDBMS有很多的不同,记住这些差异非常重要。本文我们主要对Cassandra和RDBMS的设计差别进行全面的比较,接下来就让我们来一起了解一下吧。

没有查询语言

SQL是关系型数据库的标准查询语言,Cassandra却没有查询语言。不过Cassandra确实也有自己的RPC序列化机制,Thrift。通过Thrift API,用户可以访问其中的数据。

没有引用完整性

Cassandra没有引用完整性的概念,因而没有join的概念。在关系型数据库中,你可以在一个表中指定一个外部键值, 以此引用另一个表中记录的主键。但是,Cassandra并没有提供这个功能。存储其他表中的相关ID是一个通用需求,这仍然是被支持的,但Cassandra里没有级联删除这样的概念。

第二索引

第二索引确实是一个有用的功能,比如你需要找到具有某个属性的酒店的唯一ID,在关系型数据库里,可能这么查询:

SELECT hotelID FROM Hotel WHERE name = ‘Clarion Midtown’;

当你知道酒店的名字却不知道ID的时候,肯定想这么查询这个酒店。关系型数据库如果接到这个查询,会进行一个全表扫描,检查每行的name列,查找所需要的名字。如果表很大,这种查询可能会很慢。对这种情况,关系型数据库的解决方案就是为这列建一个索引,相当于这部分数据的一个副本,来帮助更快地检索数据。因为HotelID已经是一个主键约束了,主键会自动进行索引,也就是主索引,所以,对name列建立的索引自然就是第二索引,目前Cassandra仍然不支持第二索引。

要在Cassandra中做到同样的事情,需要创建另一个列族来存储查询信息。你可以创建一个列族来存储酒店名,并将它们映射到酒店的ID。第二列族实际上起到一个显式的第二索引的作用。

第二索引目前正在被加入到Cassandra 0.7之中来,允许为列值建立索引。所以,如果你希望找到所有居住在指定城市的用户,第二索引的支持将会让你不必费力手工建立第二索引列族了。

排序成为一种设计决策

在RDBMS中,可以在查询中使用ORDER BY来轻松改变返回记录的顺序。默认的排序方法确实是不可配置的;默认情况下,记录按照它们写入的顺序被读出。如果希望改变顺序,只要改变查询语句即可,而且可以对任意一组列进行排序。但在Cassandra之中,排序就不同了,它变成了一个设计决策。列族的定义中包含一个CompareWith配置元素,这个配置指定了行在读出的时候按照什么方式排序,它在查询的时候是无法重新配置的。

RDBMS限制你只能基于存储在列中的数据类型来进行排序,但Cassandra存储的数据是字节数组,所以这种用指定数据类型排序的方法是行不通的。不过,你能做的是把列当作几种可排序的类型之一(ASCII、LONG、integer、TimestampUUID、字典排序等)。如果需要,你还可以使用自己实现的比较器来进行排序。此外,Cassandra里没有SQL里的ORDER BY和GROUP BY语句。

反范式化

在关系型数据库设计中,我们经常强调范式化的重要性。但是当使用Cassandra时,这就不是一个优点了,因为只有当数据模型是反范式化的时候,它的性能才是***的。实际上,很多公司最终都会将关系型数据库反范式化,这主要有两个原因。其一是性能原因,当他们在其多年积累的海量有价值的数据上进行大量的join操作的时候,无法得到所需的性能,于是就按照已知的查询内容来反范式化数据库以优化查询。这种方法最终可以工作,但和关系型数据库的设计初衷相悖,最终引发的问题就是,在这种条件下,使用关系型数据库是否还是***手段。

关系型数据库进行反范式化的第二个原因是业务文档结构有时需要留存。也就是说,你有一个外围表,引用了很多的外部表,表的数据可能会随时间发生变化,但你也需要以快照形式保存外围文档的历史。常见的一个例子是收款信息。你已经有客户和产品表了,而且认为可以在收款信息里引用这些表。但是实际不应该这么做,因为客户和价格信息都可能发生变化,那时你就会丢失收款信息的完整性了,因为这些表的变动似乎在收款时也发生了,这可能会影响到审计、报告,甚至是违法的,还可能引发其他问题。

在关系型数据库里, 反范式化会破坏Codd的范式, 我们需要尽力避免。但在Cassandra中,反范式化却正好合乎规则。它在数据模型很简单时并不必要,但也不需要害怕它。

重点在于,首先对数据建模、然后再写查询的方法不再适用了。Cassandra中,应该先定义好查询,并围绕查询来组织数据。考虑一下应用使用的最基本的查询路径,之后根据查询路径来构建所需要的列族就可以了。

批评者们认为这是个非常严重的问题。不过在设计数据库的时候能够考虑应用如何查询也并非没有道理,实际上,一般在关系型数据库里也是这么做的。如果不能正确预期查询方式,那么不论是在Cassandra里还是在关系型数据库里,都会遇到问题。当然,查询方式可能会随着时间推移而改变,那么就不得不更新数据了。不过这和在关系型数据库里定义表时犯错或需要新的附加表也没什么区别。

关于Cassandra与RDBMS的比较就介绍到这里了,希望本次的介绍能够给您带来一些收获!

【编辑推荐】

  1. 谈一谈Oracle WDP计划和Oracle认证
  2. 谈一谈Oracle实例历程和它的数据库构造
  3. Oracle客户端NLS_LANG参数的设置详解
  4. 关于MySQL数据库创建内存表时的一些注意事项
  5. 简单介绍一下Oracle ERP上线后的迅捷管教和新功能

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/236442.html<

(0)
运维的头像运维
上一篇2025-04-22 00:39
下一篇 2025-04-22 00:40

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注