当前位置: 首页 > news >正文

RDBMS 的历史回顾

“数据库”这个词是怎么来的?当 SQL 是 SEQUEL 时它代表什么?通过这篇有关 RDBMS 历史的文章了解所有这些内容以及更多内容。
埃里克·迪特里希用户头像 经过 埃里克·迪特里希  核心 · Anush Gasparyan 用户头像 经过 阿努什·加斯帕里安  · 2017年7月21日 · 意见
 喜欢 (15)
 评论 (6)
 节省
  鸣叫 
  分享 
13.1K 次观看
加入 DZone 社区并获得完整的会员体验。 免费加入
如果您必须选择一种统一的技术来将所有开发人员聚集在一起,那么您可能会比选择关系数据库做得更糟糕。当然,没有一个话题能够真正统一 

那么为何不?我们可以将软件归结为两个核心组件:数据和行为。因此,就像我们都学习编程语言来表达行为一样,我们也学习一些记录和保存宝贵数据的方法。

当我们将足够多的数据以某种有组织的格式放在一起时,我们就拥有了一个数据库。当我们以“关系”的方式组织数据库时,我们就有了一个关系数据库。然后,当我们添加管理和优化对关系数据的访问的功能时,我们就拥有了一个关系数据库管理系统(RDBMS)。

毫无疑问您对这些产品有一定的熟悉度。其中包括 Oracle、Microsoft 的 SQL Server、PostgreSQL 和 MySQL 等行业支柱。

最新的 DZone 参考卡

移动数据库要点


事实上,它们与风景如此完美地融合在一起,以至于你很容易认为它们是理所当然的。但他们从哪里来,为什么呢?这些年来它们是如何演变的?今天,让我们回顾一下RDBMS的历史。

第一个数据库
您可能会惊讶地发现数据库的概念早于现代计算。您可以在这篇文章中更详细地阅读它,但我只想说,这个概念的根源可以追溯到 1880 年美国的人口普查,那个时代的创新者设计了“制表机”,在所谓的“制表机”上打孔。 “打卡。” 这些卡片和存储它们的方法成为最初的“数据库”(或数据库)。

20 世纪 60 年代初,一位名叫查尔斯·巴赫曼 (Charles Bachman) 的人将这一概念自动化。后来,他因创建“集成数据存储”或 IDS 的努力而获得了图灵奖。他利用物理卡数据库中的概念,例如“文件”、“字段”和“密钥”,构建了一个系统,将应用程序逻辑与数据存储分离到文件中。即使是现在,相隔 50 多年,我们仍然会认为这是一个数据库。

在巴赫曼的领导下,20 世纪 60 年代出现了两种类型的数据库:网络数据库和分层数据库。您可以在这里单独阅读这些内容。简而言之,层次模型将数据组织成树,而网络模型是一种松散的结构,允许直接建模 m 到 n 的关系。

关系革命
如果您还没有听说过 EF Codd,您可能想了解一些有关他的信息。就计算机科学界的人物而言,他留下了相当长的阴影。Codd 构思了我们今天使用的关系数据库模型。适当地,由于他在那里工作,您可以在 IBM 网站上阅读有关他的信息。

当 Codd在 1970 年发表他的开创性论文时,世界已经经历了现有的数据库模型足够长的时间,以了解它们的优点和缺点。这些缺点中最主要的是数据和数据的物理存储之间的耦合造成的困难。换句话说,记录本身告诉搜索者到哪里寻找后续记录。

那时,您无疑明白,处理能力和磁盘空间的成本要 高得多。这些系统在最初存储数据时表现良好。但新的处理方式或新查询的需要会导致昂贵且耗时的返工。

科德极大地改变了这一点。他的关系模型将数据的形式与数据的物理存储解耦。仅此一点就带来了重大改进。但科德的“12 条规则(实际上是 13 条,因为他对它们进行了零索引)”会稍后出现。这些规则要求消除任何重复的数据,同时有效地优化存储成本。

SQL 的兴起
我们的历史正在开始完善现代数据库。但我们还有很多工作要做。

如果您参加过任何大学水平的数据库课程,您可能听说过Boyes-Codd 范式 (BCNF)。如果您对模式重复数据删除练习只有模糊的记忆,请不要担心。我不会让你重新复习你的课程作业,除非你认识到这个 Codd 与关系模型之父是同一个 Codd。

他的犯罪正常化伙伴雷蒙德·博伊斯 (Raymond Boyce) 曾与科德和 IBM 的另一位名叫唐纳德·张伯伦 (Donald Chamberline) 的绅士一起工作。他们都在数据库领域做出了重要的工作。但博伊斯和张伯伦联手创建了一种从这些新型“关系数据库”请求信息的标准方法。他们将其称为“结构化英语查询语言”或简称“SEQUEL”。后来它变得更短,成为“结构查询语言”或“SQL”。

虽然 SQL 并不是唯一针对此类查询提出的游戏,但它确实胜出。当然,有很多因素促成了这一结果。但 SQL 的一个可以说是杀手级的特性是它的 声明性。应用程序程序员只需指定 他们想要哪些记录,而不需要指定 如何检索它们。“如何”成为 RDBMS 的实现细节。

互联网爆炸
关系模型的起源发生在 20 世纪 70 年代的 IBM,SQL 的概念也是如此。但 SQL 的大幅崛起发生在 20 世纪 80 年代。各种商业 RDBMS 供应商的崛起也是如此。80 年代,随着大家都围绕 SQL 标准进行标准化,出现了许多 RDBMS 数据库产品和供应商。事实证明,RDBMS 在企业中获得了巨大的商业成功。

然而,就像新形成的恒星系统中的星子一样,这些小型 RDBMS 并没有持续存在。通过一个增长的过程,较大的竞争对手吸收了较小的竞争对手,直到我们今天所知道的参与者开始出现并成熟。

这发生在互联网出现的时候。如果说 20 世纪 80 年代 SQL 的爆炸式增长是一件大事的话,那么没有人为接下来发生的事情做好准备。随着网站成为网络应用程序,数据对通信的重要性前所未有。突然之间,地球上几乎每个开发人员似乎都需要对某些 ​​RDBMS 进行客户端-服务器访问。

这种需求给供应商带来了优化、扩展功能集的压力,并普遍迎合应用程序开发人员的需求。供应商纷纷提供各种产品,并鼓励 RDBMS 占据“宇宙中心”的角色。

重新审视竞争
这里还有最后一块拼图尚未连接。我打赌你能猜到。当然,我说的是 NoSQL 运动的出现。

回想一下,当科德工作时,他试图解决他那个时代的昂贵瓶颈:磁盘空间和处理。关系模型极大地节省了空间。但有时,这是以某些类型的数据变得极其复杂为代价的。换句话说,并非所有事物都适合关系存储和规范化。例如,大量事务日志并不能真正从规范化中受益。

随着“网络规模”的概念逐渐融入我们的集体意识,一些人开始重新审视 RDBMS 对于每个应用程序的普遍假设。他们实现了诸如文档数据库之类的东西,以新的“非传统”方式存储和处理数据。他们在这样做中取得了巨大的成功。

正是带着一种恰如其分的对称感,我们到达了现在。在 RDBMS 占领计算世界之前,它有一些竞争对手。现在,大约 40 年后,它再次出现了一些竞争对手。对于计算而言,没有什么比 RDBMS 更重要了。但 40 年后的历史将把它归类为网络规模时代的众多选择之一。

相关文章:

RDBMS 的历史回顾

“数据库”这个词是怎么来的?当 SQL 是 SEQUEL 时它代表什么?通过这篇有关 RDBMS 历史的文章了解所有这些内容以及更多内容。 埃里克迪特里希用户头像 经过 埃里克迪特里希 核心 Anush Gasparyan 用户头像 经过 阿努什加斯帕里安 2017年7月21日 意见…...

windows 离线安装 vue 环境

由于公司要求在内网开发项目,而内网不能连接外网,因此只能离线安装 vue 环境,在网上找过很多的离线安装方法,但都没有成功,于是在不断的尝试中找到了以下方法。 1、找一台与内网电脑相同系统的有网电脑。 2、在有网的电…...

python实现批量pdf转txt和word

文章目录 背景需求环境安装完整代码效果 背景需求 已经获取到了大量的pdf在download文件夹中,但是我需要的是txt文件和word文件~ 环境安装 pip install pdf2docx pdfminer.six完整代码 # pip install pdf2docx pdfminer.siximport os from pdf2docx …...

c++ 并发与多线程(12)线程安全的单例模式-2

一、内部静态变量的懒汉单例(C++11 线程安全) #include <iostream> #include <thread> #include <vector>class Single { public:// 获取单实例对象static Single& GetInstance();// 打印实例地址void Print();private:// 私有构造函数,防止外部创建对…...

银河麒麟v10x86或者arm离线安装服务

银河麒麟v10x86或者arm离线安装服务 最近有个项目&#xff0c;甲方的服务器用的全是国产化服务器银河麒麟&#xff0c;架构是x86的然后也无法连接外网&#xff0c;需要离线安装服务正常思路就是找到离线安装的包&#xff0c;然后拷贝到现场的服务器中进行安装所以问题就在于如…...

【Ansible自动化运维工具 1】Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

Ansible常用模块 一、Ansible1.1 简介1.2 工作原理1.3 Ansible的特性1.3.1 特性一&#xff1a;Agentless&#xff0c;即无Agent的存在1.3.2 特性二&#xff1a;幂等性 1.4 Ansible的基本组件 二、Ansible环境安装部署2.1 安装ansible2.2 查看基本信息2.3 配置远程主机清单 三、…...

Telegram 引入了国产小程序容器技术

Telegram 宣布为其开发者提供了一项“能够在 App 中运行迷你应用”的新功能&#xff08; 迷你应用即 Mini App&#xff0c;下文中以“小程序”代替&#xff09;。 在一篇博客文章中&#xff0c;Telegram 的开发者写到“小程序提供了可替代互联网网站的灵活界面&#xff08;cre…...

Capture One Pro 23图像处理工具「Mac」

Capture One Pro是一款专业的图像处理软件&#xff0c;旨在为摄影师和其他专业用户提供最佳的图像编辑和后期处理工具。 Capture One Pro 的主要功能包括 RAW 文件处理、图像编辑、颜色校正、曝光控制、局部调整、批处理等。它的相机支持列表非常广泛&#xff0c;几乎可以支持…...

rust OJ实战

目录 力扣 414. 第三大的数 力扣 628. 三个数的最大乘积 力扣 414. 第三大的数 给你一个非空数组&#xff0c;返回此数组中 第三大的数 。如果不存在&#xff0c;则返回数组中最大的数。 示例 1&#xff1a; 输入&#xff1a;[3, 2, 1] 输出&#xff1a;1 解释&#xff1a;…...

聊聊KafkaListener的实现机制

序 本文只要研究一下KafkaListener的实现机制 KafkaListener org/springframework/kafka/annotation/KafkaListener.java Target({ ElementType.TYPE, ElementType.METHOD, ElementType.ANNOTATION_TYPE }) Retention(RetentionPolicy.RUNTIME) MessageMapping Documented …...

Golang洗牌算法(Golang乱序算法)

Golang 洗牌算法&#xff08;乱序算法&#xff09;&#xff1b;需求背景&#xff1a;从一个文件下下读取所有文件&#xff0c;获取他们的名字&#xff0c; 将名字乱序排序&#xff0c;按着乱序后的序列&#xff0c;通过名字去找到文件&#xff0c;再上传&#xff0c;以达到上传…...

SpringBoot 源码分析(三) 监听器分析以及属性文件加载分析

前言 在创建SpringBoot项目的时候会在对应的application.properties或者application.yml文件中添加对应的属性信息&#xff0c;这些属性文件是什么时候被加载的&#xff1f;如果要实现自定义的属性文件怎么来实现&#xff1f;在讲属性加载之前先讲下监听器分析。 一、监听器分…...

记录nvm use node.js版本失败,出现报错: exit status 1: ��û���㹻��Ȩ��ִ�д˲�����

使用管理员权限运行cmd&#xff0c;再使用nvm use node.js版本号 参考&#xff1a; nvm use (node版本号)时报错&#xff1a; exit status 1: &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;㹻&#xfffd;&#xfffd;Ȩ&#xfffd;&#xfffd;ִ&#xf…...

【蓝牙协议】简介:蓝牙芯片、蓝牙协议架构

文章目录 蓝牙芯片架构另一个视角由下到上看&#xff1a;Controller-->Host由上到下看&#xff1a;Host-->Controller 蓝牙协议架构视角HW层——蓝牙芯片层Transport——数据传输层HOST——协议层 总结 参考&#xff1a;https://zhuanlan.zhihu.com/p/585248998 参考&…...

【深度学习】

什么是深度学习&#xff1f; 感知器 为了实现模拟人类的学习&#xff0c;科学家们首先设计了构成神经网络的基本结构神经元&#xff08;感知器模型&#xff09;&#xff0c;然后再由大量的神经元构成复杂的&#xff0c;能够实现各种功能的神经网络。 这种模式和超能陆战队中的…...

centos启动tomcat 并指定jdk 版本

在tomcat的catalina.sh文件手动设置JAVA_HOME变量即可 例如&#xff1a; 前提是文件存在 保存配置重新启动tomcat...

day37(事件轮询机制 ajaxGet执行步骤与案例(五个步骤) ajax属性 PHP返回JSON对象(两种))

一.事件轮询机制 1. 无论同步还是异步代码都要经过主线程编译&#xff0c;同步代码开始排在执行栈(主线程)上&#xff0c;异步代码开 始存放在任务队列中 2. 主线程优先执行同步代码&#xff0c;同步代码必须前一行执行完&#xff0c;后一行才能执行&#xff1b;当异步代码…...

Flume基本使用--mysql数据输出

MySQL数据输出 在MySQL中建立数据库school&#xff0c;在数据库中建立表student。SQL语句如下&#xff1a; create database school; use school; create table student(id int not null,name varchar(40),age int,grade int,primary key(id) ); 请使用Flume实时捕…...

MySQL——EXPLAIN用法详解

EXPLAIN是MySQL官方提供的sql分析的工具之一&#xff0c;可以用于模拟优化器执行sql查询语句&#xff0c;从而知道MySQL是如何处理sql语句。EXPLAIN主要用于分析查询语句或表结构的性能瓶颈。 以下是基于MySQL5.7.19版本进行分析的&#xff0c;不同版本之间略有差异。 1、EXP…...

69 划分字母区间

划分字母区间 题解1 贪心1&#xff08;方法略笨&#xff0c;性能很差&#xff09;题解2 贪心2&#xff08;参考标答&#xff09; 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&am…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...