关系型数据库

关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 主流的关系型数据库包括 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)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。

  1. 使用场景

Oracle适用于大型联机事务处理(OLTP)系统,而SQL Server适用于较小的OLTP系统和决策支持系统(DSS)。Oracle是一个高度可扩展的DBMS,可处理大量的并发事务。然而,与Oracle不同,SQL Server是为小型应用程序设计的,因此它可以更有效地处理对应的任务。

  1. 可靠性

在高容量、高事务的应用程序中,保证数据的可靠性十分重要。在这方面,Oracle比SQL Server更具可靠性。Oracle在许多方面提供专业的支持以及丰富的安全控制,这些高级功能使它成为高性能、高可靠性的数据库。

  1. 安全性

安全是所有企业应用程序的核心要素之一。在这方面,Oracle和SQL Server之间有很小的差异。Oracle是一款高度专业化的DBMS,拥有广泛、复杂而强大的安全功能。与之相比,SQL Server提供相对简单的安全功能,但它却是很容易操作的。

  1. 管理和维护

管理和维护DBMS是一项必须处理的重要任务。在这方面,Oracle比SQL Server更具挑战性。Oracle的配置、部署和维护中需要更多的技术知识。但是,正如我们在第二点中所提到的,Oracle拥有强大的可靠性和高性能,这使得它成为更大型数据库为默认选择。

  1. 价格

数据库管理系统的价格也是企业选择的一个要素。在这方面,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类似,需要手动创建分区表、索引等。通过继承,比如按时间,每月创建一个表分区,数据记录到对应分区中。

缺点:

  1. 不支持复杂的查询:PostgreSQL数据库不支持复杂的查询,不能有效地处理复杂的数据查询。
  2. 不支持分布式:PostgreSQL数据库不支持分布式,不能有效地处理大数据量。
  3. 不支持并发操作: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开始支持集群。

区别

存储方式不同
  • 关系型数据库是用表格存储的,数据表可以彼此关联协作存储,更容易提取数据
扩展方式不同
  • 关系型数据库是纵向扩展,提高处理能力。
  • 故当数据量很大的时候,计算机性能强的处理起来更快
  • 非关系型数据库是横向扩展的,他的层次关系就是一种天然的分布式
  • 故数据量很大的时候可以添加更多服务器节点来承担负载
应用场景
  • 关系型数据库可以支持复杂的查询,操作事务也是但是面对海量数据下访问速度会很慢无法满足需求
  • 非关系型数据库可以在海量数据量的情况下,满足对数据库高并发读写需求,高效存储与访问需求,高可扩展性与高可用性需求