
【作者主页】Francek Chen
【专栏介绍】⌈ ⌈ ⌈大数据技术原理与应用 ⌋ ⌋ ⌋专栏系统介绍大数据的相关知识,分为大数据基础篇、大数据存储与管理篇、大数据处理与分析篇、大数据应用篇。内容包含大数据概述、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据库HBase、NoSQL数据库、云数据库、MapReduce、Hadoop再探讨、数据仓库Hive、Spark、流计算、Flink、图计算、数据可视化,以及大数据在互联网领域、生物医学领域的应用和大数据的其他应用。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/BigData_principle_application。
文章目录
表1给出了 NoSQL 和关系数据库的简单比较,对比指标包括数据库原理、数据规模、数据库模式、查询效率、一致性、数据完整性、扩展性、可用性、标准化、技术支持和可维护性等方面。从表中可以看出,关系数据库的突出优势在于,以完善的关系代数理论作为基础,有严格的标准,支持事务 ACID 四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持;其劣势在于,可扩展性较差,无法较好地支持海量数据存储,数据模型过于死板,无法较好地支持 Web 2.0 应用,事务机制影响了系统的整体性能等。NoSQL 数据库的明显优势在于,可以支持超大规模数据存储,其灵活的数据模型可以很好地支持 Web 2.0 应用,具有强大的横向扩展能力等;其劣势在于,缺乏数学理论基础,复杂查询性能不高,一般都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等。
表1 NoSQL和关系数据库的简单比较
| 比较标准 | RDBMS | NoSQL | 备注 |
|---|---|---|---|
| 数据库原理 | 完全支持 | 部分支持 | RDBMS有关系代数理论作为基础 NoSQL没有统一的理论基础 |
| 数据规模 | 大 | 超大 | RDBMS很难实现横向扩展,纵向扩展的空间也比较有限,性能会随着数据规模的增大而降低 NoSQL可以很容易通过添加更多设备来支持更大规模的数据 |
| 数据库模式 | 固定 | 灵活 | RDBMS需要定义数据库模式,严格遵守数据定义和相关约束条件 NoSQL不存在数据库模式,可以自由灵活定义并存储各种不同类型的数据 |
| 查询效率 | 快 | 可以实现高效的简单查询,但是不具备高度结构化查询等特性,复杂查询的性能不尽人意 | RDBMS借助于索引机制可以实现快速查询(包括记录查询和范围查询) 很多NoSQL数据库没有面向复杂查询的索引,虽然NoSQL可以使用MapReduce来加速查询,但是,在复杂查询方面的性能仍然不如RDBMS |
| 一致性 | 强一致性 | 弱一致性 | RDBMS严格遵守事务ACID模型,可以保证事务强一致性 很多NoSQL数据库放松了对事务ACID四性的要求,而是遵守BASE模型,只能保证最终一致性 |
| 数据完整性 | 容易实现 | 很难实现 | 任何一个RDBMS都可以很容易实现数据完整性,比如通过主键或者非空约束来实现实体完整性,通过主键、外键来实现参照完整性,通过约束或者触发器来实现用户自定义完整性 但是,在NoSQL数据库却无法实现 |
| 扩展性 | 一般 | 好 | RDBMS很难实现横向扩展,纵向扩展的空间也比较有限。 NoSQL在设计之初就充分考虑了横向扩展的需求,可以很容易通过添加廉价设备实现扩展。 |
| 可用性 | 好 | 很好 | RDBMS在任何时候都以保证数据一致性为优先目标,其次才是优化系统性能,随着数据规模的增大,RDBMS为了保证严格的一致性,只能提供相对较弱的可用性。 大多数NoSQL都能提供较高的可用性。 |
| 标准化 | 是 | 否 | RDBMS已经标准化(SQL)。 NoSQL还没有行业标准,不同的NoSQL数据库都有自己的查询语言,很难规范应用程序接口。 StoneBraker认为:NoSQL缺乏统一查询语言,将会拖慢NoSQL发展。 |
| 技术支持 | 高 | 低 | RDBMS经过几十年的发展,已经非常成熟,Oracle等大型厂商都可以提供很好的技术支持。 NoSQL在技术支持方面仍然处于起步阶段,还不成熟,缺乏有力的技术支持。 |
| 可维护性 | 复杂 | 复杂 | RDBMS需要专门的数据库管理员(DBA)维护。 NoSQL数据库虽然没有DBMS复杂,也难以维护。 |
分布式数据库公司 VoltDB 的首席技术官、Ingres 和 PostgreSQL 数据库的总设计师 Michael Stonebraker 认为,当今大多数商业数据库软件已经在市场上存在 30 年或更长时间,它们的设计并没有围绕自动化以及事务性环境,同时这些数据库在这几十年中不断发展出的功能并没有想象中的那么好。许多新兴的 NoSQL 数据库的普及,如 MongoDB 和 Cassandra,很好地弥补了传统数据库系统的局限性,但是 NoSQL 没有一个统一的查询语言,这将拖慢 NoSQL 的发展。
通过上述对 NoSQL 数据库和关系数据库的一系列比较可以看出,二者各有优势,也都存在不同层面的缺陷。因此,在实际应用中,二者都可以有各自的目标用户群体和市场空间,不存在一个完全取代另一个的问题。对于关系数据库而言,在一些特定应用领域,其地位和作用仍然无法被取代,银行、超市等领域的业务系统仍然高度依赖于关系数据库来保证数据的一致性。此外,对于一些复杂查询分析型应用而言,基于关系数据库的数据仓库产品,仍然可以获得比基于 NoSQL 数据库更好的性能。比如有研究人员利用基准测试数据集 TPC-H 和 YCSB(Yahoo! Cloud Serving Benchmark),对微软基于 SQL Server 的并行数据仓库产品 PDW(Parallel Data Warehouse)和 Hadoop 平台上的数据仓库产品 Hive(属于 NoSQL)进行了实验比较,实验结果表明 PDW 的性能比 Hive 的性能快 9 倍。对于 NoSQL 数据库而言,Web 2.0 领域是其未来的主战场,Web 2.0 网站系统对于数据一致性要求不高,但是对数据量和并发读写要求较高,NoSQL 数据库可以很好地满足这些应用的需求。在实际应用中,一些公司也会采用混合的方式构建数据库应用,比如亚马逊就使用不同类型的数据库来支撑它的电子商务应用。对于"购物车"这种临时性数据,采用键值存储会更加高效,当前的产品和订单信息则适合存放在关系数据库中,大量的历史订单信息则适合保存在类似 MongoDB 的文档数据库中。
小结
NoSQL 和关系数据库各有优劣。关系数据库理论成熟、标准完善、查询高效,但扩展性差,难以应对海量数据和 Web 2.0 应用。NoSQL 支持超大规模数据存储,模型灵活,扩展性强,但理论基础薄弱,复杂查询性能低,且缺乏统一标准和成熟技术支持。二者可针对不同应用场景发挥优势,也可混合使用。
欢迎 点赞👍 | 收藏⭐ | 评论✍ | 关注🤗
