关系型数据库
关系型数据库的价值
- 获取持久化数据:关系型数据库最大的价值就是持久存储大量的数据。
- 并发:关系型数据库通过“事务”来控制对数据的访问,事务机制可以在并发情况下运行良好而且在出现错误时,还能通过回滚事务保证数据不被破坏。
- 集成:可以使用共享数据库集成,即将多个应用程序的数据保存在同一个数据库中,使所有应用程序很容易使用彼此的数据。
关系型数据库的缺点:阻抗失谐
关系模型和内存中的数据结构之间存在差异,这种现象通常称为“阻抗失谐”。
可以使用“对象-关系框架”在一定程度上解决这个问题,例如Hibernate和iBATIS,它们实现了著名的“映射模式”。
应用程序数据库和集成数据库
之前所有的应用程序共用一个数据库,提高了数据通信的效率,但是这样的集成数据库设计非常复杂,而且每个应用程序对数据库的操作还需要和其他的应用程序相协调。
现在出现了应用程序数据库,即数据库的内容只能由一个应用程序直接访问,而把交互工作交给应用程序接口来实现。
关系型数据库的挑战:集群
现在大多数企业都会采用由多个小型计算机组成的集群来运行他们所提供的服务,但是关系型数据库并不是设计给集群用的。虽然可以将数据库分片并放在各自独立的服务器上运行,但是应用程序必须控制所有分片。而且,查询、参照完整性、事务、一致性控制等操作也都无法以跨分片的方式执行。
NoSQL数据库
NoSQL数据库的特征
- 不使用关系模型(大部分NoSQL数据库都是面向聚合的,可以适当使用物化视图重组主聚合的数据来弥补关系查询的缺失)
- 专为集群设计(图数据库除外)
- 开源(免费)
- 无模式(不用事先修改定义,即可自由添加字段。但是还是会遵循一些“隐含模式”,是指在编写数据操作代码时,对数据结构所做的一系列假设)
数据库新趋势:混合持久化
现在使用数据库的新趋势是“混合持久化”,也就是在不同的场景下使用不同的数据存储方式,并将数据库封装在应用程序中,使用Web服务来在程序之间通信。
何时选择NoSQL
一般来说选用NoSQL有两个主要原因:
- 待处理的数据量很大,或对数据访问的效率要求很高,从而必须将数据放在集群上。
- 想采用一种更为方便的数据交互方式来提高应用程序开发效率。