当前位置: 首页 > 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…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

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

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

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...