关系型数据库
关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access,MongoDB 等。 SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
优点 :
- 都是表结构易于维护 使用便捷
- SQL支持复杂的查询
- 可以进行多个表的复杂查询操作
缺点 :
- 海量数据下读写性能较差(可用索引方式加速)
- 表结构固定,灵活性较差
- 在高并发需求下,io需求极大
Mysql
优点
1.体积小、速度快、总体拥有成本低,开源,提供的接口支持多种语言连接操作。
2.支持多种操作系统 Windows、Linux和Mac。
3.MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySQL能很容易充分利用CPU。
4.MySQL有一个非常灵活而且安全的权限和口令系统。当客户与MySQL服务器连接时,他们之间所有的口令传送被加密,而且MySQL支持主机认证。
5.MySQL能够提供很多不同的使用者界面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言界面,例如C++,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上。
缺点
1.不支持热备份。
2.MySQL不支持自定义数据类型
3.MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。
4.MySQL对存储过程和触发器支持不够良好。
5.尽管MySQL理论上仍是开源产品,也有人抱怨它诞生之后更新缓慢。然而,应该注意到有一些基于MySQL并完整集成的数据库(如MariaDB),在标准的MySQL基础上带来了额外价值。
6 不支持分布式:MySQL数据库不支持分布式,不能有效地处理大数据量。
7.不支持并发操作:MySQL数据库不支持并发操作,不能有效地处理多用户的并发操作。
何时使用?
1.分布式操作:
MySQL的官方版本不支持分布式架构,但是可以通过一些对MySQL的扩展实现分布式架构。其中,MySQL的分片架构(Sharding)是最为常见的一种实现方式。
2.高安全性:
- MySQL的安全功能,用一种简单的方式为数据访问(和使用)提供了可靠的保护。
- 对MySQL进行安全加固需要更改默认端口、创建强密码、限制远程访问、限制权限、定期备份和更新MySQL版本。通过这些措施,我们可以提高MySQL的安全性,防止数据泄露和攻击。
- https://www.php.cn/faq/523581.html 权限控制
3.Web网站和Web应用:
绝大多数的网站(和Web应用程序)可以忽视约束性地简单工作在MySQL上。这种灵活的和可扩展的工具是易于使用和易于管理的——这被证明非常有助于长期运行。
4.定制解决方案:
如果你工作在一个高度量身定制的解决方案上,MySQL能够很容易地尾随和执行你的规则,这要感谢其丰富的配置设置和操作模式。
何时不用?
1.SQL服从性:
因为MySQL没有[想要]实现SQL的全部标准,所以这个工具不完全符合SQL。如果你需要对这样的关系数据库管理系统进行整合,从MySQL进行切换是不容易的。
2.并发:
即使MySQL和一些存储引擎能够真地很好执行读取操作,但并发读写还是有问题的。
数据库连接池 添加缓存 设置索引 分库分表 主从复制
https://baijiahao.baidu.com/s?id=1763755604980634207&wfr=spider&for=pc (高并发解决方案)
3.缺乏特色:
再次提及,根据数据库引擎的选择标准,MySQL会缺乏一定的特性,如全文搜索。
SQL server 及 Oracle
通常用于数据库和仓库管理系统的软件之一是 SQL Server。
一、开放性
SQL Server
只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据库。
Oracle
能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。
- 使用场景
Oracle适用于大型联机事务处理(OLTP)系统,而SQL Server适用于较小的OLTP系统和决策支持系统(DSS)。Oracle是一个高度可扩展的DBMS,可处理大量的并发事务。然而,与Oracle不同,SQL Server是为小型应用程序设计的,因此它可以更有效地处理对应的任务。
- 可靠性
在高容量、高事务的应用程序中,保证数据的可靠性十分重要。在这方面,Oracle比SQL Server更具可靠性。Oracle在许多方面提供专业的支持以及丰富的安全控制,这些高级功能使它成为高性能、高可靠性的数据库。
- 安全性
安全是所有企业应用程序的核心要素之一。在这方面,Oracle和SQL Server之间有很小的差异。Oracle是一款高度专业化的DBMS,拥有广泛、复杂而强大的安全功能。与之相比,SQL Server提供相对简单的安全功能,但它却是很容易操作的。
- 管理和维护
管理和维护DBMS是一项必须处理的重要任务。在这方面,Oracle比SQL Server更具挑战性。Oracle的配置、部署和维护中需要更多的技术知识。但是,正如我们在第二点中所提到的,Oracle拥有强大的可靠性和高性能,这使得它成为更大型数据库为默认选择。
- 价格
数据库管理系统的价格也是企业选择的一个要素。在这方面,Oracle比SQL Server更昂贵。Oracle是高度专业的DBMS,拥有全面的商业和行业特许权,而这削减了竞争对手的影响力。这使得Oracle的许可证成本高于大多数其他DBMS系统,包括SQL Server。因此,SQL Server是那些希望在紧张的预算内运行的企业的首选。
Mariadb
MariaDB添加了对JSON数据类型、全文搜索、空间索引等功能的支持,还增强了MySQL的性能和可靠性。
MariaDB和MySQL的命令和语法基本相同,但MariaDB有一些额外的功能和改进,需要开发人员和管理员熟悉。在性能上,MariaDB的性能要优于MySQL,尤其是在大型数据库和高并发负载下。此外,MariaDB采用了GPL协议,而MySQL则采用了两种许可证,商业版和GPL版之间有着一些差异。
Postgres
PostgreSQL数据库具有以下优缺点:
优点:
1、开源免费:PostgreSQL是一种开源免费的对象关系型数据库管理系统,引入的成本可以节省大量的开发和运行成本。
2、支持多种特性:PostgreSQL支持多用户、多数据库、多事务并发处理、多平台(Windows平台、Linux平台)等功能。
3、多种编程语言:PostgreSQL支持多种程序语言,包括C/C++、Java、Ada、Perl、Python以及将来支持JavaScript等。
4、可扩展性:PostgreSQL具有很高的可扩展性,可以轻松管理和使用大型数据库,允许用户根据需要动态增加数据库容量。
5、可以自动创建分区,提高查询效率(类似分表)PostgreSQL数据库中对表做分区,与11g之前的Oracle类似,需要手动创建分区表、索引等。通过继承,比如按时间,每月创建一个表分区,数据记录到对应分区中。
https://blog.csdn.net/xgb2018/article/details/109244096
缺点:
-
不支持复杂的查询:PostgreSQL数据库不支持复杂的查询,不能有效地处理复杂的数据查询。
-
不支持分布式:PostgreSQL数据库不支持分布式,不能有效地处理大数据量。
-
不支持并发操作:PostgreSQL数据库不支持并发操作,不能有效地处理多用户的并发操作。
非关系型数据库
NoSql 约等于 非关系型数据库 严格来说不是一种数据库,而是一种数据结构化存储方法的集合 主流的 NoSQL 数据库有 Redis、MongBD、Hbase、CouhDB 等。
优点
- 存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛 速度快:
- nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
- 高扩展性
缺点
- 不支持SQL语言,学习起来较难
- 不支持事务
- 数据结构相对复杂,复杂查询方面稍欠
Redis
Redis 简介
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets
数据类型操作。 - 原子 –
Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。 - 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
https://worktile.com/kb/ask/22901.html 持久化 AOF RDB
Redis AND MongoDB
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value非关系型数据库,并提供多种语言的API。redis是一个key-value存储系统。Redis是非关系型数据库的一种,经常用作缓存。
MongoDB是一个基于分布式文件存储的数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据。
MongoDB 详细介绍
https://zhuanlan.zhihu.com/p/572868187
同时MongoDB是由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
1、内存管理机制
Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
2、支持的数据结构
Redis 支持的数据结构丰富,包括hash、set、list等。
MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
3、数据量和性能
当物理内存够用的时候,redis>mongodb>mysql
当物理内存不够用的时候,redis和mongodb都会使用虚拟内存。
实际上如果redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。
但是,mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。
mongodb还是能够保证性能。
4、性能
mongodb依赖内存,TPS较高;Redis依赖内存,TPS非常高。性能上Redis优于MongoDB。
5、可靠性
mongodb从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性;
Redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能。
可靠性上MongoDB优于Redis。
6、数据分析
mongodb内置数据分析功能(mapreduce);而Redis不支持。
7、事务支持情况
Redis 事务支持比较弱,只能保证事务中的每个操作连续执行;mongodb不支持事务。
8、集群
MongoDB 集群技术比较成熟,Redis从3.0开始支持集群。
区别
存储方式不同
- 关系型数据库是用表格存储的,数据表可以彼此关联协作存储,更容易提取数据
扩展方式不同
- 关系型数据库是纵向扩展,提高处理能力。
- 故当数据量很大的时候,计算机性能强的处理起来更快
- 非关系型数据库是横向扩展的,他的层次关系就是一种天然的分布式
- 故数据量很大的时候可以添加更多服务器节点来承担负载
应用场景
- 关系型数据库可以支持复杂的查询,操作事务也是但是面对海量数据下访问速度会很慢无法满足需求
- 非关系型数据库可以在海量数据量的情况下,满足对数据库高并发读写需求,高效存储与访问需求,高可扩展性与高可用性需求