关系型数据库与非关系型数据库的区别(学习了解记录)
前言
在工作中经常遇到不同的使用,对他们彼此间的关系不甚清楚,所以抽时间整理一下网络大神的详解,作为自己的学习笔记。
关系型数据库(SQL)
关系型数据库是指使用关系模型(二维表格模型)来组织的数据库
什么是关系模型
简单理解就是二维表格模型,一个关系型数据库是由二维表及其之间的关系组成一个数据组织。
常见关系型数据库管理系统
- Oracle
- MySQL
- Microsoft SQL Server
- SQLite
- PostgreSQL
- IBM DB2
关系型数据库优势
- 符合正常开发逻辑
- 有很好的生态开发环境与支持
- 可以处理非常复杂的数据关系
- 提供对事务的支持,能保证系统中的事务正确执行,同时提供事务的恢复,回滚,并发控制和死锁问题的解决。
- 数据存储在磁盘,安全可靠(怀疑)。
关系型数据库的不足
- 高并发读写能力差
- 海量数据情况下读写效率低
- 可扩展性不足
- 数据模型灵活度低
- 面对海量数据存在不足
非关系型数据库(NOSQL)
非关系型数据是指数据以对象形式储存在数据库中,而对象间的关系由每个对象自身的属性来决定,常存储非结构化数据。
常见的非关系型数据库
- 键值数据库:Redis, Memcached, Riak
- 列族数据库:Bigtable, HBase, Cassandra
- 文档数据库:MongoDB, CouchDB, MarkLogic
- 图形数据库: Neo4j, InfoGrid
非关系型数据库的优势
- 以key-value形式为存储格式,使用灵活,应用场景广泛。
- 速度快,效率高
- 海量数据的维护和处理非常轻松,成本低
- 非关系型数据库具有扩展简单,高并发,高稳定性,成本低的优势
- 可以实现数据的分布式处理
- 非关系型数据库天然是分布式的,可以通过集群实现负载均衡
非关系型数据库的不足
- 暂时不提供SQL支持,学习与使用成本高
- 非关系型数据库没有事务处理,无法保障数据的完整性和安全性。事故和处理海量数据,但不一定安全。
- 功能没有关系型数据库完善
- 复杂表关联查询不容易实现
如何选择?
目前大多数大型互联网都会选择使用MySQL+NoSQL的组合方式,因为各有优缺
关系型数据库适合存储结构化数据:比如:用户的帐户,地址
- 数据通常需要结构化查询
- 数据规模,增长速度可以预期
- 事务性,一致性,适合存储比较复杂的数据
NoSQL适合存储非结构化的数据,比如:文章,评论:
- 数据通常需要用于模糊处理,例如全文搜素,机器学习等,适合较为简单的数据
- 数据是海量的,并且增长难以预期
- 按照key值获取数据效率高,但对于join或其他结构化查询的支持就比较差
总结
其实最主要的区别在于事务的使用,与数据量的大小,如何选择全依需求而定,但就目前学习和使用过一段时间的我而言,两者中非关系型数据好像更适合后端程序开发。
但随着技术的发展,单从某些特性定义他是不是关系型数据库已经不准确,也没有意义了,我们只需了解传统意义的关系型数据库是哪几个,有啥显著特点即可。