前端工程师应该掌握的数据库知识

前端工程师应该掌握的数据库知识

本文整理了作为前端工程师,应该了解一些数据库系统的知识;这些知识和web息息相关,在一定程度上代表着web的发展方向。

1. ORM - Object Relation Mapping

  • 在关系型数据库和对象之间做一个映射,这样在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作即可
  • 这种映射能能够成功的原理在于:面向对象编程把所有实体看成对象,关系型数据库则是采用实体之间的关系来连接数据。所以实体之间的关系也可以通过对象来表达,这样的话就可以使用面向对象编程来操作关系型数据库。
  • ORM映射前后:1. table --> class 2. record --> object 3. field --> attribute
  • ORM的优点:降低了学习和开发成本;程序员可以不用再写SQL来进行数据库操作了;减少程序的代码量;降低由于书写的SQL代码质量差带来的影响。
  • ORM的缺点:不太容易处理复杂的查询语句;性能较直接使用SQL差。

2. 数据库分类比较

常见的数据库可以分成下面几类:关系型数据库、NoSQL、内存数据库

  • 关系型数据库:建立在关系模型基础上的数据库,借助集合代数等数学海联和方法来处理数据库中的数据,显示世界中的各种实体以及实体之间的各种联系均可以用关系模型来表示。关系型数据库是由多张互相联接的二维行列表格组成的数据库。
  • NoSQL: 本意是Not only SQL,被用来泛指非关系型数据库。其产生的目的就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
  • 内存数据库:将数据库整体存储在内从中,提高性能。

3. 内存数据库用到的缓存技术

常见的缓存技术分成两种,一个是MemCache,一个是Redis。

  • MemCache: 是一个高性能的分布式的内存对象缓存系统,用于动态web应用以减轻数据库负载。通过在内存里维护一个同一个巨大的hash表,它能够用来存储各种格式的数据。
  • Redis: 是一个开源的,使用ANSI C语言编写、支持网络,可基于内存亦可以持久化的日志型、k-v数据库,并提供多种语言的API。
  • 二者的差异:
    • 都是放在内存中,都是内存型数据库,都支持k-v数据类型;但是MemCache还支持其它类型的数据。
    • Redis将一些很久没有用到的数据交换到磁盘中,也就是说并不是将数据一种存储在内存中的。
    • Redis支持更多的数据库的特性,例如对事务的支持;从这一点来说,Redis更像是一个数据库,而MemCache只是一张大的哈希表。

4. 数据库之间的对比

4.1 对比关系型数据库和NoSQL

项目名称 关系型数据库 NoSQL
并发支持 支持并发但是效率低 并发性能高
存储和查询 关系表的方式存储,使用SQL查询 海量存储,查询效率高
扩展方式 向上扩展 向外扩展
水平扩展
事务 事务性强 事务性弱
容量 有限存储 海量存储
数据类型 结构化数据 非结构化数据
数据一致性 实时一致性 弱一致性
索引方式 B树,哈希 k-v
应用领域 通用应用领域 特殊应用领域

4.2 内存数据库和关系数据库对比

数据库名称 主要数据类型 读写性能 存储容量 可靠性
内存数据库 k-v 内存读写,性能高 容量受限 可靠性低,恢复机制复杂
关系型数据库 关系模式 外存读写,性能低 容量大 内建恢复机制,可靠性高

4.3 关系型数据库对比文件系统

数据库名称 设计难度 数据冗余程度 数据架构 应用扩展性
文件系统 难度较小 同一数据可能在多个文件中重复,冗余度大 以应用为中心 可扩展性低
关系型数据库 难度较大 有不同范式规范,冗余小 以数据库为中心 可扩展性高

5. 数据库系统中的并发控制

并发控制中的三个常见问题:丢失更新、不可重复读、读脏数据

  • 丢失更新:A,B先后读取数据x,A修改x,B修改x,则A修改x无效
  • 不可重复读:A读取数据x计算出结果r, B读取并修改了数据x,A再次读取数据x执行相同的计算,得到结果r2,发现r和r2并不相等
  • 读脏数据:A读取并修改了x的值为x_new,B读取x(实际上是x_new),A进行rollback,x的值恢复,B读到了被回滚的数据

6. 数据库不规范导致的几个问题

  1. 数据冗余:同一个数据出现多次
  2. 修改异常:和数据冗余息息相关
  3. 插入异常:仅有部分关系确定时无法创建记录
  4. 删除异常:删除部分关系的时候将整个数据删除

7. 反规范化技术

  • 定义: 规范化设计之后,希望通过牺牲部分规范化来提高性能。
  • 优点:
    • 降低连接操作的需求
    • 降低外码和索引的数目
    • 减少表的数目
    • 提高查询效率
  • 缺点:
    • 数据变得冗余
    • 破坏了数据库的完整性
    • 降低了数据库的写入效率
  • 方法:
    • 增加冗余列
    • 增加派生列
    • 重新组表
    • 水平分割表
    • 垂直分割表

8. 分布式数据库

分布式数据库是由一组数据组成的,这组数据分布在计算机网络的不同的计算机上,网络中的每个结点都具有独立处理的能力,即场地自治。同时每一个结点也能通过网络通信子系统执行全局应用。分布式数据库系统实在集中式数据库系统技术的基础之上发展卡来的,具有以下的特点:

  1. 数据独立性:物理独立、分布独立、逻辑独立
  2. 集中与自治共享结合的控制结构
  3. 适当增加数据冗余度
  4. 全局的一致性、可串行性、可恢复性

8.1 分布式数据库系统的优点

  1. 解决企业部门分散而数据需要相互联系的问题。
  2. 在增加新的相对自主的部门扩充机构的时候,使用分布式数据库系统可以将影响降至最小。
  3. 分布式数据库系统支持负载均衡。
  4. 已经存在的数据库系统,可以自下而上的形成分布式数据库系统,从而支持全局应用。
  5. 分布式数据库系统在发生失效的时候,故障影响的数据范围较小,因此可靠性更高。

9. 数据仓库

数据仓库集成是把种来源的数据集中在一起,建立数据仓库,所有数据都驻留在单个数据库服务器上,配置大型处理器和存储容量,其特点是:

  1. 集成的数据
  2. 面向主题
  3. 数据相对稳定
  4. 包含历史信息

9.1 数据仓库结构的四个层次

  1. 数据源
  2. 数据的存储和管理:是核心
  3. OLAP(联机分析处理)服务器
  4. 前端工具

9.2 商业智能BI

BI系统主要包括:数据预处理,建立数据仓库,数据分析和数据表现四个主要阶段

10. Redis的存储和切片方式

  • 分布式存储方案
    • 主从
    • cluster
  • 集群切片方式
    • 客户端切片:即通过key就可以确定value由哪个数据库服务器提供
    • key经过散列得到slot,根据slot确定value由哪个数据库服务器提供
相关推荐
腾讯TNTWeb前端团队29 分钟前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰4 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪4 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪4 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy5 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom5 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom6 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom6 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom6 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom6 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试