导言
什么是数据库
现如今,数据库已经是人们生活中密不可分的一部分,只是对于大部分人来说,数据库隐藏在背后不被人所察觉。当我们在网上购物时,其实就是在访问数据库。当使用信用卡购买商品时,后面也需要与一个数据库相连来检查是否有足够的信用额度。进行投保时,无论投保什么险种,寿险、重疾险、车险等等,都需要连接一个数据库,根据您提供的个人详细信息计算出保险金额。可以说,数据库已经无处不在。
数据库对于当今的任何一个组织来说都是至关重要的。那什么是数据库?本质上讲,数据库就是信息的集合。"数据库"这个词通常指的是由数据库管理系统(DBMS)管理的数据的集合。数据库管理系统满足:
- 允许用户使用专门的数据定义语言来创建新的数据库并指定其模式(数据的逻辑结构)。
- 给予用户使用适当的语言来查询数据和修改数据的能力,这种语言通常称为查询语言(Query Language)或者数据操纵语言(Data-Manipulation Language, DML)。
- 支持非常大量的数据进行长期的存储,并且允许高效地查询数据和进行数据修改。
- 使数据具有持久性(Durability),即能够从故障、多种类型的错误或者故意滥用中进行恢复。
- 允许多个用户同时对数据进行访问,并且保证不同用户间的操作不会相互影响(即隔离性,Isolation),同时还保证不会发生数据不完整的情况(即原子性,Atomicity)。
- 还要提供保证数据一致性(Consistency)的能力(例如,在一个事务完成后,账户余额不能是负数)。原子性(A)、一致性(C)、隔离性(I)、持久性(D)即构成了事务处理中的"ACID准则"。
数据库管理系统经历了文件数据库、网状数据库、层次数据库以及当前广泛使用的关系数据库(RDBMS)。
1970年,IBM的研究员E. F. Codd在刊物《Communication of the ACM》上发表了一篇名为《A Relational Model of Data for Large Shared Data Banks》的论文,提出了关系模型的概念,奠定了关系模型的理论基础。Codd认为数据库系统应该将组织成叫做"关系"的表的数据呈现给用户。而在其后,应该有一个复杂的数据结构,允许对各式各样的查询进行快速响应。与早期数据库系统不同的是,使用关系数据库不需要关心存储结构,查询可以使用很高级的语言(即后来的SQL)来表达,这样可以极大地提高开发效率。到1990年,关系数据库已经成为标准。然而数据库领域一直在发展,而且数据管理新的问题和方法也不断出现,数据库领域仍然是一片待发展的广阔天地。
关系模型概述
在关系模型中,所有数据逻辑上被组织成关系(表)结构。每个关系都有自己的名称,并由数据的一些命名属性(表中的列)所组成。每个元组(表中的行)包含每个属性的一个取值。关系模型的最大优点就在于其逻辑结构简单,但这种简单的结构却有着可靠的理论基础。
关系
关系模型基于数学中的关系(Relation)的概念,通常关系用表来表示。
- 关系是由行和列组成的表。
- 属性是关系中命名的列。
- 关系中的每一行成为元组。
- 关系中所包含的属性的个数称为维数。
- 关系中所包含的元组的个数称为基数。
- 一个或多个属性的取值集合定义为域。
在关系模型中,用关系保存数据库所描述对象的信息。关系用二维表表示,表中每一行对应一个单独的记录,即元组。表中的每一列则对应一个属性。无论属性如何排列,都是同一个关系。域在关系模型中起着非常重要的作用。必须给关系中的每一个属性定义一个域。例如,表1-1中显示了关系weather中某些属性的域。
表1-1 关系表weather
| 属性 | 含义 | 域定义 |
|---|---|---|
| city | 城市名称 | VARCHAR(80),80 个字符 |
| temp_lo | 最低温度 | NUMERIC(3,1),范围 0.0~99.9 |
| temp_hi | 最高温度 | NUMERIC(3,1),范围 0.0~99.9 |
| prcp | 降水量 | NUMERIC(5,1),范围 0.0~9999.9 |
| date | 记录日期 | 日期类型,格式为 yyyy-mm-dd |
通过域,用户就可以用它来定义属性取值的含义与范围。因此,当系统执行关系操作时,就有更多的信息可使用,从而避免语义错误的操作。例如,将城市名称与最低温度进行比较是无法进行的,因为两者属于不同的域。而将最高温度与降水量比较或者减法操作是无意义的,尽管这两个属性所定义的域都是数值型(但单纯从逻辑上来说仍然可以进行比较或减法操作)。
模式
关系名和其属性集合的组合称为这个关系的模式,例如:
weather(city, temp_lo, temp_hi, prcp, date)
在关系模型中,数据库是由一个或多个关系组成。这种关系模式的集合称为数据库模式。
约束
关系模型对于存储在数据库中的数据具有约束的能力。例如,对关系weather上的属性temp_lo施加"非空"的约束,那temp_lo就不能接受空的数值。
键和外键
关系模型中,可以对数据库模式的关系加很多约束,其中键是最基本的一种约束。键由关系的一组属性集组成,通过定义键可以保证关系中任何两个元组的值在定义键的属性集上取值不同。例如,在关系weather上将属性集city和date作为键,即:
weather(city, temp_lo, temp_hi, prcp, date)
可以保证同一个城市同一天的元组只能出现一次。
外键也是一种约束,该约束判定一个关系中出现的值也必须在另一个关系的键中出现。
关系代数
关系代数是一门用于操作关系模型中数据的代数,它的原子操作数是:
- 代表关系的变量。
- 代表有限关系的常量。
以及交、并、差等操作符。关于关系代数更详细的内容,推荐参阅《数据库系统基础教程》、《SQL and Relational Theory》以及《Database in Depth》。
结构化查询语言(SQL)介绍
SQL是对关系数据库管理系统进行查询和操作的语言。是对关系代数的一种具体实现(可能并不包含关系代数中的所有操作)。SQL包含两个主要部分:
- 数据定义语言(Data Definition Language,DDL),用于定义数据库结构和数据的访问控制。
- 数据操作语言(Data Manipulation Language, DML),用于检索和更新数据。
SQL是非过程化语言,用户只需描述所需的信息,不需要给出获取该信息的具体过程,即SQL不需要指定数据的访问方法。
SQL简单查询举例
SQL中最简单的查询是找出关系中满足特定条件的元组。简单查询使用代表SQL特点的三个保留字SELECT、FROM和WHERE来表示。例如,从关系weather中找出杭州在2020-07-01这天的天气信息,其SQL语句为:
SELECT * FROM weather
WHERE city = '杭州' AND date = DATE '2020-07-01';
该查询展示了大部分SQL查询语句的典型格式,即select-from-where形式。
- FROM子句给出查询所引用的关系,在本例中查询引用的关系是weather。
- WHERE子句是一个条件子句,就像关系代数中的选择条件。和查询匹配的元组必须满足此条件。在本例中,条件是元组的city属性(值为'杭州')和date属性(值为DATE '2020-07-01')。
- SELECT子句决定满足条件元组的哪些属性应该在结果中列出。例子中的*表示列出元组的所有属性。
需要了解更多的关于SQL语言方面的内容,推荐查阅《Database in Depth》。
Halo 数据库
本节介绍羲和(Halo)数据库。
Halo 数据库是杭州易景数通科技有限公司自主研发的新一代高性能、高安全、自主可控的通用型统一数据库,采用自主研发的核心内核架构打造。
发展历程
羲和数据库的历史可以追溯到 2012 年。当时部分创始团队成员面临将一个现有业务应用系统从 Oracle 移植至其他数据库的需求和挑战,为尽可能降低移植风险和成本,团队成员开始深入研究数据库技术,并写下了第一行数据库代码——用于兼容 Oracle 的 SYSDATE 关键字。这便是羲和数据库的起点。
2021 年,羲和通用数据库系统软件 V1.0 的第一个版本正式发布,此后经历了多个版本的演进。各版本的发布时间、内核架构、版本性质与迭代如下:
| 版本 | 发布时间 | 内核架构 | 版本性质 | 迭代 |
|---|---|---|---|---|
| V1.0.13 | 2021年5月 | Discovery 内核 | 创新预览版 | 羲和通用数据库系统软件 V1.0 首个版本;增强 Oracle 兼容性,特别是对 PL/SQL 函数、存储过程、自定义类型的增强 |
| V1.0.14 | 2022年3月 | Enterprise 内核 | 首个长期支持版(LTS) | 引入全新的生态计算引擎 E5;支持 GB18030;增强 PL/SQL Package 功能;完整支持 MySQL 协议与语法 |
| V1.0.15 | 2023年9月 | Enterprise 内核 | 创新预览版 | 增强 PL/SQL 匿名块功能与 Oracle 序列兼容能力 |
| V1.0.16 | 2024年6月 | 增强版 Enterprise 内核 | 第二个长期支持版(LTS) | 同一集群内可同时支持 PostgreSQL、MySQL、Oracle 等多种运行模式,进一步降低用户使用成本;新增 HSM 分布式共享存储引擎、透明重定向引擎、GDD 全域数据库组件等多项独创技术 |
核心竞争力
Halo 数据库的核心竞争力体现在以下方面:
1. 插件式内核架构
Halo 采用插件式内核架构,具备高度可扩展性。基于该架构,Halo 独有的分组复制(MGR)能力可在不影响性能的前提下实现异地容灾,并达到 RPO=0(数据零丢失)。
2. 多模兼容(MMC)
多模式兼容技术(Multi-mode Compatibility,MMC)是 Halo 独有的、基于内核原生实现的突破性创新,专为 Oracle、MySQL、PostgreSQL 等异构数据库的应用迁移与替换场景设计。该技术通过可配置的解析引擎,智能适配不同数据库的语法特性与运行机制,使企业在迁移时应用层代码修改量减少 95% 以上甚至完全免修改。
其核心价值在于:
- 迁移成本低:企业可以小时级速度完成数据库迁移,显著降低大规模替换的时间和经济成本;
- 开发零门槛:开发人员无需改变既有的 SQL 编写习惯与开发流程,极大缩短技术适应周期;
- 性能零损耗:通过完全兼容的协议层设计,彻底消除传统迁移过程中常见的性能劣化问题,确保业务连续性不受影响。