数据库做为我们日常开发的一个组件或者说基础服务,也许有人认为把它当个黑盒直接用就好,费那事儿干嘛。确实数据库的设计也做到了让我们不了解也能干活。但实际开发中往往会遇到性能退化、遇到bug,遇到服务问题等等,对数据库了解一些,就能更快的恢复,减少风险。

另外,作为经过多年发展,近乎成熟的产品,数据库里有不少有意思的地方。这里面对于设计一个数据库,一个存储引擎有大量的工作,以及各种取舍与权衡。比如最容易想到的,写入的时候如果顺序写,那数据插入效率更快,但如果是按某个顺序来检索,就必须得查出来再重新排序。比如数据怎样序列化,协议怎样组织,索引是怎样工作的,查询分析器、执行计划这些是怎样工作的,怎样挑选执行计划从而来保证查询的高效;另外数据库里数据是怎样组织来保证数据的存储、压缩来优化空间占用,又是怎样提升磁盘到内存中的访问速度,怎样做垃圾回收的......

最近看了一些数据库相关的书、文章等内容感觉不错,后面打算根据自己的理解写一写,也会选一些优质的英文文章翻译。

今天是翻译的第一篇。


数据库是什么?

概括来讲,数据库是一系列可以方便的访问和修改的数据的集合。

所有数据库管理系统的主要工作都是可靠的存储数据并使其对用户可用。

甚至说简单的一堆文件都可以做到轻松访问和修改这一点。实际上,像SQLite这类简单的数据库也确实仅是一堆文件。但是,SQLite 它是一些经过精心设计的文件,因为它允许执行这些操作:

  • 通过事务来保证数据安全和一致
  • 可以快速处理数百万量级的数据

概括来看,一个数据库可以看成以下图这些部分组成:

在很多书籍或论文里,对于数据库的描述都有自己的方式。比如『数据库技术内幕』一书组件插图是这样的:

所以不用太关注我们是怎样组织这些组成部分或者太关注处理流程怎样命名,因为我们做了一些取舍以适合这篇文章的编写。你需要重点关注的是这些不同的组成部分。

总体理解就是将数据库可以划分成多个相互交互组件。

核心组件

  • 流程管理器:多数数据库都有一个需要管理的「池」,用来组织流程、线程等。甚至,为了取得纳秒级等极致性能,一些现代的数据库会使用其自己的线程,而不再是基于操作系统的线程。
  • 网络管理器:网络的 I/O 一直是很重要的部分,特别是对分布式数据库来说。这也是为什么一些数据库实现自己的网络管理器的原因。
  • 文件系统管理器:数据库遇到第一个瓶颈是磁盘 I/O。有一个能够完美处理操作系统文件系统甚至替换它的文件系统管理器相当重要。
  • 内存管理器:为了避免磁盘I/O带来的影响,需要大量的内存。但是当你需要管理大量的内存的时候,就会需要一个高效的内存管理器。特别是你有多个查询同时在用内存查询的时候。
  • 安全管理器:用于管理用户的身份验证和授权
  • 客户端管理器:用于管理客户端的连接

工具

  • 备份管理器:用来备份和还原数据库
  • 恢复管理器:用来在数据库崩溃之后,以一致的状态来重新启动数据库
  • 监控管理器:用来记录数据库的活动日志并提供监控数据
  • 「管理」管理器:提供工具来管理数据库、表空间、模式,并管理像表的名称、结构等数据库的元数据

查询管理器

  • 查询解析器:检查查询是否合法,像SQL语句有没有词法、语法错误这种
  • 查询重写器:预优化查询
  • 查询优化器:优化查询,让查询可以更高效的执行
  • 查询执行器:编译和执行查询

数据管理器

  • 事务管理器:处理事务
  • 缓存管理器:和我们常用缓存一样理解,在使用前先把他们放到内存,在数据写到磁盘前也放到内存
  • 数据访问管理器:访问磁盘上的数据

后面的文章,我们会重点描述数据库内是怎样通过以下这些流程来管理和进行SQL的查询的:

  • 客户端管理器
  • 查询管理器
  • 数据管理器

英文链接:http://coding-geek.com/how-databases-work

sqlite journal恢复数据_数据库是咋工作的?相关推荐

  1. sqlite journal恢复数据_误删不跑路,大牛运维神技能分分钟恢复

    一.背景 突发事件,应用上传的数据被程序自动删掉了,可悲的是还没有数据备份,数据是放在系统的 /data/webapps/xxxx/upload 目录下面,可把我们急坏了,之前又没有做过数据恢复的测试 ...

  2. mysql数据库恢复数据_【技术分享】使用Innodb存储引擎的mysql数据库恢复

    作者:维一零 预估稿费:400RMB(不服你也来投稿啊!) 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 前言 某天,在测试一张新数据表的字段时,由于在phpmyadmin不断 ...

  3. MySQL基础之 恢复数据和数据库迁移

    1.mysql命令或者source命令恢复数据 这两个命令在进行恢复数据的时候要检查是否创建数据库.如果数据库不存在,则恢复失败. 数据库迁移 1.相同版本的mysql数据库之间的迁移. mysqld ...

  4. 发布json数据_数据库每周国际新闻 20201211

    数据库每周国际新闻 2020-12-11阅览文章内容详情,请点击最下方的"阅读原文"!备注:原文内含有文章原有链接,详细信息均可通过原文链接查看.英文原文地址:https://db ...

  5. mysql用binlog恢复数据_利用mysql的binlog恢复数据

    MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...

  6. linux mysql恢复数据_删库不跑路详解MySQL数据恢复

    作者:程淇铭 出处:https://segmentfault.com/a/1190000020116271 日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么 ...

  7. mysql被格式化恢复数据_三种常见数据库文件恢复方法介绍

    数据库可以说是一个数据仓库,因此在数据安全方面,每个数据库从备份到恢复,都有自己的一套方法流程.今天我们就从常见的MySQL, SQL以及Oracle三种数据库,来讲讲数据库恢复方法. 首先,最简单的 ...

  8. Dws同步mysql数据_数据库技术丨GaussDB(DWS)数据同步状态查看方法

    摘要:针对数据同步状态查看方法,GaussDB(DWS)提供了丰富的系统函数.视图.工具等可以直观地对同步进度进行跟踪,尤其是为方便定位人员使用,gs_ctl工具已集合了大部分相关系统函数的调用,可做 ...

  9. 大数据_数据库(DBMS、DB、SQL )

    目录 开篇 一.数据库 1.数据库(通常概念) 1.1 数据库简介 1.2 数据库的好处 1.3 数据库相关概念 2.DBMS数据库管理系统概述 2.1 具体概念 2.2 DBMS根据数据的保存格式( ...

最新文章

  1. 人工智能推动全球业务的数据中心管理
  2. python coding_python开头的coding设置方法
  3. 十字交叉链表c语言,C语言课程设计报告—十字交叉链表的应用.doc
  4. MATLAB机器学习系列-5 RBF、GRNN和PNN神经网络原理及其例子代码
  5. cmake qt 添加路径 项目_CMake配置Qt工程
  6. java高校职工工资管理论文_毕业设计论文java大学工资管理系统
  7. iOS工程中的info.plist文件的完整研究
  8. 谈谈社群收割用户的六板斧
  9. JS实现新打开网页最大化or全屏显示
  10. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L3 答案(01-23)
  11. 基于二叉链表的二叉树最长路径的求解
  12. 计算机 取得高级权限,怎么获取电脑的最高管理员权限
  13. java中替换的快捷键是什么_idea替换快捷键,批量处理对象的操作
  14. linux系统 ubuntu 使用GWE图形用户界面调整显卡风扇转速曲线
  15. 从图片到dataframe——语义分割数据集制作全流程
  16. google外链怎么做?谷歌网站做外链的方法
  17. 500分能上的计算机院校,高考500分上下怎么选大学?推荐这几所学校
  18. Office2010 下载
  19. 计算机人脸识别算哪个专业,人脸识别属于计算机什么领域
  20. [转]数学之美-【算法】 - 用来流方式计算UV的基数算法

热门文章

  1. 如何在 Django REST Framework 中对分页结果过滤和排序?
  2. CSDN学院全面改版啦!这次真的“搞大”了!
  3. 终极解密!输入网址按回车到底发生了什么?
  4. 之江天枢正式开源!一文详解天枢核心优势
  5. 中兴的芯片,到底什么水平?
  6. 苹果 Mac 电脑将采用自研芯片、App Store 上线“小程序”,WWDC20 为开发者带来了什么 ?
  7. @程序员,你处在食物链哪级?有人跑车游轮到处玩,有人被房价羞辱,被平庸折磨...
  8. 拜托,别再问我什么是 B+ 树了
  9. 12 大 AI App 技术创意,教你如何在 2020 年赚到钱
  10. 在家远程办公效率低?那你一定要收好这个「在家办公」神器!