关系型数据库(SQL)介绍
顾名思义,关系型数据库就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。
关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一行就存放着一条数据(比如一个用户的信息)。
大部分关系型数据库都使用 SQL 来操作数据库中的数据。并且,大部分关系型数据库都支持事务的四大特性(ACID)。
⑴ 原子性(Atomicity)
⑵ 一致性(Consistency)
⑶ 隔离性(Isolation)
⑷ 持久性(Durability)
常见的关系型数据库有:MySQL、PostgreSQL、Oracle、SQL Server、SQLite......
非关系型数据库(NOSQL)介绍:
非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。
常见的NOSQL数据库:
键值数据库:Redis、Memcached、Riak
列族数据库:Bigtable、HBase、Cassandra
文档数据库:MongoDB、CouchDB、MarkLogic
图形数据库:Neo4j、InfoGrid
关系型数据库(SQL)与非关系型数据库(NOSQL)优势与不足
关系型数据库的优势:
采用二维表结构非常贴近正常开发逻辑(关系型数据模型相对层次型数据模型和网状型数据模型等其他模型来说更容易理解);
支持通用的SQL(结构化查询语言)语句;
丰富的完整性大大减少了数据冗余和数据不一致的问题。并且全部由表结构组成,文件格式一致;
可以用SQL句子多个表之间做非常繁杂的查询;
关系型数据库提供对事务的支持,能保证系统中事务的正确执行,同时提供事务的恢复、回滚、并发控制和死锁问题的解决。
数据存储在磁盘中,安全可靠。
关系型数据库存在的不足:
高并发读写能力差:网站类用户的并发性访问非常高,而一台数据库的最大连接数有限,且硬盘 I/O 有限,不能满足很多人同时连接。
海量数据情况下读写效率低:对大数据量的表进行读写操作时,需要等待较长的时间等待响应。
可扩展性不足:不像web server和app server那样简单的添加硬件和服务节点来拓展性能和负荷工作能力。
数据模型灵活度低:关系型数据库的数据模型定义严格,无法快速容纳新的数据类型(需要提前知道需要存储什么样类型的数据)。
非关系型数据库的优势:
非关系型数据库存储数据的格式可以是 key-value 形式、文档形式、图片形式等。使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
速度快,效率高。 NoSQL 可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。
海量数据的维护和处理非常轻松,成本低。
非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
可以实现数据的分布式处理。
非关系型数据库存在的不足:
非关系型数据库暂时不提供 SQL 支持,学习和使用成本较高。
非关系数据库没有事务处理,无法保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。
功能没有关系型数据库完善。
复杂表关联查询不容易实现。