一、关系型数据库
采用关系模型来组织数据的数据库,关系模型就是:二维表格模型。一张二维表的表名就是关系,二维表中的一行就是一条记录(对应一个POJO类),二维表中的一列就是一个字段。
1、优点:
- 容易理解
- 使用方便,通用的sql语言
- 易于维护,丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大降低了数据冗余和数据不一致的概率。
三范式能减低冗余
2、缺点:
- 由于数据保存到磁盘当中,所以磁盘I/O是并发的瓶颈
- 海量数据查询效率低。比如说多条数据中,查询其中的一条,效率很慢。
- 横向扩展困难,无法简单的通过添加硬件和服务节点来扩展性能和负载能力,当需要对数据库进行升级和扩展时,需要停机维护和数据迁移。
- 多表的关联查询以及复杂的数据分析类型的复杂sql查询,性能欠佳。因为要保证acid,必须按照三范式设计。
acid:原子性、一致性、持久性
3、数据库:
Orcale,Sql Server,MySql,DB2
二、非关系型数据库
非关系型,分布式,一般不保证遵循ACID原则的数据存储系统。键值对存储,结构不固定。
1、优点:
- 根据需要添加字段,不需要多表联查。仅需id取出对应的value。比如存一个id,整个value就是一个POJO对象。而关系型数据库是一行好多个value值是一个POJO对象。
- 适用于SNS(社会化网络服务软件。比如facebook,微博)
- 严格上讲不是一种数据库,而是一种数据结构化存储方法的集合。
2、缺点:
只适合存储一些较为简单的数据
不合适复杂查询的数据
不合适持久存储海量数据。长时间存储大量的数据。
3、数据库:
K-V:Redis,Memcache
文档:MongoDB。value是一个JSON字符串。比如电商的内容管理(视频、图片)
搜索:Elasticsearch,Solr
可扩展性分布式:HBase
三、区别
关系数据类型存储格式:基本数据类型:int / char /。 是不会存储一个文档、图片。而非关系数据库类型就可以。
数据一致性和事务能力是什么?
让我们举一个转账的例子来说明:小明账户里有100元,小红账户里有100元,这个时候小明往小红账户里转100元。这个时候包含两个操作:
A.先再小明账户里减100元
B.然后再往小红账户里加100元
这两个操作组合起来,就成为了一个事务。
如果在转账的时候出现了问题,小明的钱没有转到小红的账户里面,那么就需要立马将各自的钱恢复如初,同步的操作。 那么:
- 关系型数据库的强一致性就是:时间很快各自的钱恢复如初。缓冲器非常短
- 非关系型数据库的最终一致性:时间略慢各自的钱恢复如初。缓冲时间略长