AntsDB 架构

AntsDB 架构

传统数据库软件(RDBMS),尽管在功能和性能方面存在细微差别,单基本遵循非常相似的架构。如果你打开来看,你会看到b-tree,redo/undo日志,线程池,事务管理器,元数据管理器,锁定管理器等。这就像汽车一样,机器组件总是相同的,不同的无非是形状、大小和性能特征,以及不同品牌型号汽车之间的区别。

新派数据库 NoSQL / NewSQL,与旧式 RDBMS 非常不同。但他们也有着非常相似的架构。几乎所有这些数据库都是使用预写日志,日志结构合并树,集群管理等等。

而 AntsDB 则采用了与大多数主流关系数据库不同的方法,我们旨在创建一个既是OLTP又是OLAP的一体化数据库。 AntsDB 是 OLTP,因为它提供的功能对于构建前端应用程序(如ACID,亚毫秒延迟,丰富的事务管理,SQL合规性和强大的锁定管理)至关重要。它也是一个 OLAP,因为 AntsDB 底层的存储功能是一个数据仓库。 AntsDB 也像中间件一样。它是一个具有大型本地缓存的无状态事务处理器。

因此,它导致了下图所示的架构。

 

AntsDB 蚂蚁数据库 架构图

AntsDB 架构图

AntsDB 有3层构建。最外层是 MySQL 兼容层。有两个组件:网络协议和SQL解析器。

AntsDB 的网络协议实际上市再实现了完整的 MySQL 5.5协议。它是在流行的 Netty 项目的帮助下使用异步 I/O 编写的。异步 I/O 使 AntsDB 具有使用非常小的线程池支持大量活跃用户的优势。然而,传统 DBMS 使用同步 I/O。它必须为每个用户创建独占线程。要知道,线程是一种昂贵的系统资源,扩展性很差。

SQL 是一种高级语言。我们需要将复杂的逻辑分解为更小更简单的部分,例如函数,运算符,连接等。解析器就负责这个任务。在解析结束时,它会生成许多在虚拟数据库机器中运行的“指令”。解析器的结果缓存在内存中的小池中。如果前端应用程序发送重复的 SQL 语句,则可以简单地跳过昂贵的解析阶段。今天的大多数应用程序使用预先准备的声明。

我们希望 AntsDB 不仅可以与 MySQL 兼容,将来还可以与其他类型的数据库兼容。因此,它伴随着数据库虚拟化的想法。 VDM – 虚拟数据库机,在AntsDB 中实现了这个想法。 VDM 是一个运行时环境,具有数百个小型逻辑单元,如函数,连接,运算符等。除了小型构建块之外,VDM 中还有3个重要组件为它们提供服务。

事务管理器确保多个数据操控充当单个工作单元。它在内部使用64位数字来跟踪系统中的每个事务。交易完成后。它将另一个64位数作为更新版本分配给更新。该版本随后用于事务隔离和 MVCC(多版本并发控制)。

Metadata Manager 管理用户对象的生命周期,即表,列,约束等。它将人类可识别的名称映射到内存位置,文件位置和在硬件级别高效工作的唯一标识符。
SQL 查询是一种高级抽象语言。通常,数据库软件需要将查询分解为许多连接,表查找和表扫描。不幸的是,有很多不同的方法可以做到这一点。有些方法可能比其他方法更有效率。这时候就查询计划程序就要起作用了。它会智能地评估所有可能性并选择耗费最低的执行方式。

在最底层的是 AntsDB KV – 键值存储。我们有顶层负​​责 MySQL 兼容性,中间层管理 SQL 语言的复杂性。 AntsDB KV的工作是处理性能和并发性。
在 AntsDB KV 的核心,是 LSMT 商店。 LSMT – 日志结构化合并树 – 是一种组织数据库文件的方法。众所周知,在 I/O 效率方面,它比大多数主流数据库中使用的基于页面的存储要好得多。 LSMT 中的数据更紧凑。它利用高吞吐量顺序 I/O,而页面存储取决于慢速随机 I/O。在 LSMT 内部,AntsDB 使用 Skip List 数据结构而不是大多数主流数据库中使用的B树。Skip List利用CPU级别的原子操作来管理数据争用,并在高电流情况下执行得非常好,而B树使用昂贵的互斥锁。

作为一个数据库,AntsDB 必须做好最坏的准备:停电、硬件故障。我们使用提前写入日志,也就是重做日志。当今数据库程序中广泛使用这种技术进行故障恢复。一旦事务提交,更新就被写入 WAL。系统崩溃后,AntsDB 使用 WAL 中的数据在下次启动时重建 LSMT。

KV 中的最后一个组件是复制器。它的职责是在提交更新后以亚秒级方式将数据发送到 HBase。

以上总结了AntsDB架构的一个高度概括。稍后我们将更详细地介绍一些组件。

Xinwei

发表评论