数据库概览

数据库背景

一个典型的互联网产品架构包含接入层、逻辑处理层以及存储层,其中存储层承载着数据落地和持久化的任务,同时给逻辑处理层提供数据查询功能支持,那么说到存储层就要说到数据库
在这里插入图片描述

数据库分为关系型数据库和非关系型数据库,也就是我们常说的 SQLNoSQL,这两个方向的数据库代表产品分别是MySQLRedis ,本文旨在学习、梳理数据库相关的基础知识。

先上一张数据库宏观图,里面的坑,后面陆续补充:

在这里插入图片描述

关系型数据库

关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。简单来说,关系模式就是二维表格模型

优点

  • 易于理解,关系型二维表的结构非常贴近现实世界,容易理解;格式一致,易于维护。
  • 使用通用的 SQL 语言操作,使用方便,可用于复杂查询。
  • 支持事务 可靠的处理事务并且保持事务的完整性,使得对于安全性能很高的数据访问要求得以实现。
  • 数据存储在磁盘中

缺点

  1. 读写性能比较差,不能满足海量数据的高效率读写。
  2. 不节省空间。因为建立在关系模型上,就要遵循某些规则,比如数据中某字段值即使为空仍要分配空间。
  3. 固定的表结构,灵活度较低。

什么是SQL

SQL是 Structured Query Language 的缩写,译为“结构化查询语言”。SQL是一种数据库操作语言( 一种特殊目的编程语言 ),用来检索和管理关系型数据库中的数据,比如插入数据、删除数据、查询数据、创建和修改表等。

SQL是关系型数据库的标准语言,所有的关系型数据库都支持 SQL,比如 MySQLSQLiteOracleSQL ServerMS AccessDB2 等。不学习 SQL,就没法使用关系型数据库。

注意,SQL仅仅是一种查询语言,它不是数据库,要想使用 SQL,需要安装一款数据库。

什么是MySQL

MySQL是一种开源的 SQL数据库,由瑞典的 MySQLAB 公司开发。MySQL支持多线程、多用户,并且非常快速,一般的中小型网站都选择 MySQL。 目前是最流行的关系型数据库管理系统之一 。

MySQL的特点

  • MySQL是开放源代码的数据库
  • MySQL是跨平台的,可以在 Windows、Linux、Unix 和 Mac OS X 等主流操作系统上运行。
  • 价格优势:MySQL数据库是一个自由软件,任何人都可以从 MySQL的官方网站上下载该软件,这些社区版本的 MySQL都是免费试用的,即使是需要付费的附加功能,其价格也是很便宜的。相对于 Oracle等商业软件而言,MySQL具有绝对的价格优势。
  • 功能强大且使用方便:MySQL是一个真正的多用户、 多线程 SQL数据库服务器。它能够快速、有效和安全的处理大量的数据。相对于 Oracle 等数据库来说,MySQL的使用是非常简单的。MySQL主要目标是快速、健壮和易用。
  • MySQL与常用的主流数据库 OracleSQL Server 相比,主要特点就是免费,并且在任何平台上都能使用,占用的空间相对较小。但是,MySQL也有一些不足,比如对于大型项目来说,MySQL的容量和安全性就略逊于 Oracle 数据库。

MySQL详细介绍与使用:请移步到我的另一篇文章《MySQL详细介绍与使用

什么是Oracle

Oracle 是甲骨文公司的一款关系型数据库管理系统,在数据库领域一直处于领先地位的产品,是目前世界上流行的关系型数据库之一,是一种高效率、可靠性好、适应高吞吐量的数据库方案。

优点

  1. Oracle 可移植性好,能在所有主流平台上运行(包括 Windows),完全支持所有工业标准。采用完全开放策略,使客户可以选择最适合解决方案。以及对开发商的全力支持。
  2. 获得最高认证级别的 ISO 标准认证,安全性高。
  3. 与其它数据库相比,Oracle 性能最高。保持着开放平台下 TPC-DTPC-C 世界记录。
  4. 多层次网络计算,支持多种工业标准,可以用 ODBCJDBCOCI等网络客户连接 。
  5. 完全向下兼容,因此被广泛应用,且风险低 。

向下兼容指的是高版本支持低版本的或者说后期开发的版本支持和兼容早期开发的版本。

缺点

  1. 对硬件的要求高
  2. 价格比较昂贵
  3. 管理维护麻烦
  4. 操作比较复杂

Oracle安装与使用:请移步到我的另一篇文章《Oracle安装与使用

什么是SQLite

SQLite是 一个进程内的轻量级嵌入式关系型数据库 ,由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOSAndroidApp中都可以集成。

SQLite的数据库就是一个文件 ,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这就体现出来SQLite与其他数据库的最大的区别:SQLite不需要在系统中配置,直接可以使用。且SQLite不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite可直接访问其存储文件。

特点如下

  • SQLite是完全开源免费的
  • SQLite是无服务器的,不需要服务器进程或系统来操作
  • SQLite是一个跨平台的数据库系统
  • SQLite一般用于处理小到中型数据存储,对于高并发高流量的应用不适用
  • 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
  • 采用的一种库函数的形式来提供数据库的服务
  • 缺点,不能使用网络,单纯就是本地数据库
  • 加密性能不是很好,安全性不足

SQLite安装与使用:请移步到我的另一篇文章《SQLite安装与使用

非关系型数据库

什么是NoSQL

为什么需要 NoSQL

在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少都开始在性能上出现了一些瓶颈,而瓶颈的源头一般是在磁盘的I/O上。而随着互联网技术的进一步发展,各种类型的应用层出不穷,这导致在当今云计算、大数据盛行的时代,对性能有了更多的需求,主要体现在以下四个方面:

  • 低延迟的读写速度:应用快速地反应能极大地提升用户的满意度
  • 支撑海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量
  • 大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理
  • 庞大运营成本的考量:IT部门希望在硬件成本、软件成本和人力成本能够有大幅度地降低

为了克服这一问题,NoSQL应运而生,它同时具备了高性能、可扩展性强、高可用等优点,受到广泛开发人员和仓库管理人员的青睐。

NoSQL是什么

非关系型数据库又被称为 NoSQL 意为不仅仅是 SQL。 它仅仅是一个概念,用来表示非关系型数据库,通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。 常见的非关系型数据库有MongoDBRedis 等。

优点

  1. 非关系型数据库存储数据的格式可以是 key-value 形式、文档形式、图片形式等。使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
  2. 速度快,效率高。 NoSQL可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。
  3. 海量数据的维护和处理非常轻松。
  4. 非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
  5. 可以实现数据的分布式处理。

缺点

  1. 非关系型数据库暂时不提供 SQL支持,学习和使用成本较高。
  2. 非关系数据库没有事务处理,没有保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。
  3. 功能没有关系型数据库完善。

什么是MongoDB

MongoDB是一个开源的、可扩展的、跨平台的、面向文档的非关系型数据库,它由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。

MongoDB中支持以类似 jsonbson(一种计算机数据交换格式)格式来存储数据,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象语言中函数调用,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还可以对数据建立索引。

MongoDB 官网:https://www.mongodb.com/

MongoDB 安装与使用:请移步到我的另一篇文章《MongoDB 安装与使用

什么是Redis

Redis 是现在最受欢迎的NoSQL数据库之一,Redis 是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

相比于其他数据库类型,Redis 具备的特点是:

  • C/S通讯模型
  • 单进程单线程模型
  • 丰富的数据类型
  • 操作具有原子性
  • 持久化
  • 高并发读写
  • 支持lua脚本

Redis 的应用场景有哪些

  1. 缓存:减轻 MySQL 的查询压力,提升系统性能;
  2. 排行榜:利用 RedisSortSet(有序集合)实现;
  3. 计算器/限速器:利用 Redis 中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等。这类操作如果用 MySQL ,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个 API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;
  4. 好友关系:利用集合的一些命令,比如求交集、并集、差集等。可以方便解决一些共同好友、共同爱好之类的功能;
  5. 消息队列:除了 Redis 自身的发布/订阅模式,我们也可以利用 List 来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的 DB 压力,完全可以用 List 来完成异步解耦;
  6. Session 共享:Session 是保存在服务器的文件中,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用 Redis 保存 Session 后,无论用户落在那台机器上都能够获取到对应的 Session 信息。

Redis 不适合的场景:数据量太大、数据访问频率非常低的业务都不适合使用 Redis ,数据太大会增加成本,访问频率太低,保存在内存中纯属浪费资源。

Redis 安装与使用:请移步到我的另一篇文章《Redis 安装与使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值