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

AntDB-M设计之内存结构

亚信科技专注通信行业多年,AntDB数据库从诞生开始,就面对通信级的大数据量应用场景挑战,在性能、稳定性、规模化等方面获得了超过10年的通信核心业务系统验证,性能峰值达到每秒百万的通信核心交易量。AntDB-M(AntDB内存引擎)具有如此卓越的性能,与其优良的内存结构设计密不可分。因此,本文主要阐述AntDB-M的内存结构设计。

1

概    述

AntDB-M是一款全内存态运行OLTP数据库,其数据的管理以表为单位,通过表空间进行管理。存储分为两种形态:1)内存态;2)文件态。文件态为内存态的序列化后导出文件,后文表空间均指内存态。

2

表空间

表空间代表的是表的数据存放的内存空间。每个表都有自己独立的一个表空间。表空间在表创建时创建,或者在服务启动加载表时创建。表空间的结构为一个三层结构,内容分为两部分:1)表空间元数据;2)表空间数据块;

  • 三层结构

表空间的内存结构是一个三层结构:1)一级地址;2)二级地址;3)数据块; 通过该结构,每个表空间可以存放的记录条数可以达到20万亿条之多。

记录条数 = 一级地址 * 二级地址 * 数据块记录数 = 32K * 32K * 2K =20万亿条;

图1:表空间三级结构

  • 表空间元数据

表空间元数据描述了当前空间的大小信息,以及表数据记录在数据块的两级地址信息。它一般被用于表空间数据的管理,以及对表数据的高效访问。表空间的三层结构中,前两层都属于元数据,结构比较简单,存放的是下一层的地址信息。

  • 表空间数据块

表空间数据块是用来存放表数据的地方。数据块的实现结构为一个双向链表。每个数据块分为两部分:1)元数据;2)数据空间;

1)元数据

元数据为当前数据块的管理信息,主要包括:当前数据块大小、可分配数据记录数、分配的记录对象ID范围等信息。需要注意的是数据块的大小、可分配数据记录数不是固定的。这是在创建表时,基于表记录实际大小,以及一些额外数据计算而来。

2)数据空间

数据空间为存放表数据实际分配的地址空间,每个数据空间为一个连续地址空间。数据空间根据行大小分为9档,依次为:
256K,512K,1M,2M,4M,8M,16M,32M,64M。

按照每个数据空间可以保存2K~4K记录来分配。当记录长度小于128B时,记录数可能可能超过4K。

数据空间大小 = 块元数据大小 + 数据块可容纳记录条数 * 表记录行大小(带扩展信息)

图2:行记录格式

  • 记录编号

每条记录都有自己的一个唯一编号,该编号由数据插入时分配。 数据的插入不是简单的追加,而是找到一个数据空间中的空闲位置插入。数据的查询、修改、删除也是根据记录编号来快速定位数据。每个空闲位置编号唯一。 每个数据块都都会记录当前的空闲位置,这些空闲位置不需要额外的空间进行记录,在数据块内的数据空间被分配给特定记录前,这些原本用于存放记录的空间被用来记录空闲记录位置信息。这些空闲位置信息为一个简单的双向链表,将所有空闲位置串联起来。这样表空间的每行记录都有一个唯一编号,通过该编号可以快速定位所在的数据块、以及块内地址。

图3:数据块结构图

  • 记录编号与记录地址关系

记录编号通过简单计算即可得到记录实际存放地址。

图4:记录编号与记录地址关系

  • 数据块的创建

数据块在插入数据、更新数据(记录redo记录)、服务启动加载数据到内存时按需创建。数据变更需要创建数据块时,每次只会申请一个数据块,数据加载时会根据当前需要的数据块个数批量申请创建(每次创建一个)。

  • 数据块的释放

一个表空间被创建后,只有在表被drop、truncate时,表空间(包括元数据及数据块)才会被释放。rename表时,仅修改表相关元数据,表空间保持不变。

3

内存管理

表空间的内存管理分为两类:1)数据块,2)非数据块。 不同类型内存管理,可以根据内存大小提供更高效的管理方式。

内存分配分为两种:1)内存;2)内存映射;

-内存,即直接从RAM中分配内存。

-内存映射,即通过pmap方式映射到文件,只用于超大表(建表时设置了超大表选项)的数据块,其他都使用 “内存”方式。

“内存”方式的分配也分为两种策略:1)RAM;2)PMEM; 其中“PMEM”策略仅适用于安装了Intel傲腾持久内存设备的硬件环境。在建表选择表空间的分配时默认为“RAM”策略。

4

溢出列

数据空间中的记录都为定长记录,对于变长类型列,数据不在记录内存放。记录内仅记录数据长度、数据实际位置。 对于溢出列数据,有单独的内存空间存放管理,这里不展开说明。

5

索    引

表的索引分为hash索引、btree索引。两种索引都有各自独立的内存空间。这里不展开说明。

6

总    结

AntDB-M通过简洁、高效的内存结构设计,为整体的高性能打下了坚实的基础。以少量的内存、支撑了更多的数据记录。让用户可以用更少的成本来支撑更多的业务。

关于AntDB数据库


AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

相关文章:

AntDB-M设计之内存结构

亚信科技专注通信行业多年,AntDB数据库从诞生开始,就面对通信级的大数据量应用场景挑战,在性能、稳定性、规模化等方面获得了超过10年的通信核心业务系统验证,性能峰值达到每秒百万的通信核心交易量。AntDB-M(AntDB内存…...

互联网舆情监测公司监测哪些内容,TOOM北京舆情监测公司

互联网舆情监测公司是一种提供舆情监测、分析和管理服务的公司,其业务主要涉及互联网舆情监测、数据分析、报告撰写、危机处理等方面。这些公司通过使用各种技术和工具,帮助客户监测他们在互联网上的声誉和品牌形象,并提供相应的建议和解决方…...

一篇文章带你熟练使用Ansible中的playbook

目录 一、Playbook的功能 二、YAML 1、简介 2、特点 3、语法简介 4、YAML 列表 5、YAML的字典 三、playbook执行命令 四、 Playbook的核心组件 五、vim 设定技巧 练习 一、Playbook的功能 playbook 是由一个或多个play组成的列表 Playboot 文件使用YAML来写的 二、…...

HashedWheelTimer

序言这种算法是一种轮询算法的优化升级,能够以只有一个Timer的情况下处理大量的定时任务.Begin结合HashedWheelTimer的思想根据自然时间1分钟为例,来做大批量的定时任务触发首先定一个长度为60的数组,数组中存放的是Set集合,集合里面是任务详情.当有定时任务刚来的时候判断是否…...

OPenCV库移植到ARM开发板子上面配置过程

步骤一 1,环境准备去下载opencv官方的源码。 我这里用的是opencv-4.5.5版本的 2,还需要交叉编译工具一般,你交叉编译的工具板子厂家会提供工具,最好还是用板子厂家提供的交叉编译工具,因为我之前编译试过其他的交叉…...

Jenkins实现CI/CD

Jenkins是一个开源的持续集成和持续交付(CI/CD)解决方案,它可以自动执行构建、测试和部署等任务,从而简化了开发工作流程。本文将详细介绍如何使用Jenkins实现CI/CD。 首先,您需要安装Jenkins并启动它。您可以通过以下…...

如何给img标签里的请求添加自定义header

是这样的需求,有一个web页面,里面图片的上传和预览来自于一个独立的文件服务器,对http的请求需要进行访问权限的设置,就是在请求的header里加一个Authorization的字段。上传好说我用的Axios直接添加一个header就行了,但…...

Linux系统基本概念操作,用户和文件权限管理

常用快捷键和通配符常用快捷键按键作用Ctrld键盘输入结束或退出终端Ctrls暂停当前程序,暂停后按下任意键恢复运行Ctrlz将当前程序放到后台运行,恢复到前台为命令fgCtrla将光标移至输入行头,相当于Home键Ctrle将光标移至输入行末,相…...

数据库中的单表查询和多表查询

一、单表查询素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker (部门号 int(11) NOT NULL,职工号 int(11) NOT NULL,工作时间 date NOT NULL,工资 float(8,2) NOT NULL,政治面貌 varchar(10) …...

全网详解MyBatis-Plus LambdaQueryWrapper的使用说明以及LambdaQueryWrapper和QueryWapper的区别

文章目录1. 文章引言2. 代码演示3. 分析LambdaQueryWrapper3.1 引入LambdaQueryWrapper的原因3.2 LambdaQueryWrapper和QueryWapper的区别4. 重要总结1. 文章引言 今天在公司写代码时,发现同事使用LambdaQueryWrapper来查询数据,而我一直习惯使用QueryW…...

暴力破解(new)

数据来源 本文仅用于信息安全的学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 01 暴力破解介绍及应用场景 》暴力破解介绍 》暴力破解字典 GitHub - k8gege/Passwor…...

Android12之apex调试

1.问题在调试libtinyalsa.so中添加log后,但是发现push so后,却没有log打印,why?2.分析以下为libtinyalsa.so的位置/system/lib64/libtinyalsa.so /system/lib/libtinyalsa.so /apex/com.android.vndk.v31/lib64/libtinyalsa.so /a…...

Python - 数字(Number)数据类型常用操作

目录数字运算类型转换数学函数数学库math、cmathmath 模块常量math 模块方法随机函数库 randomrandom 模块方法保留小数到指定位数三角函数数字运算 :用于给变量赋值type(x):查看数据所属类型isinstance(x, A_tuple):判断数据是否为预期类型…...

QT(51)-动态链接库-windows

1.qt- 调用win32 DLL 2.qt- 调用MFC DLL 0概述: 01.扩展DLL: 必须有一个DllMain()函数,且调用AfxInitExtensionModule()函数。 CRuntimeClass类-初始化函数CDynLinkLibrary。02.windows定位DLL文件: 1&#xff09…...

[Vivado那些事儿]将自定义 IP (HDL)添加到 Vivado 模块设计(Block Design)

绪论使用Vivado Block Design设计解决了项目继承性问题,但是还有个问题,不知道大家有没有遇到,就是新设计的自定义 RTL 文件无法快速的添加到Block Design中,一种方式是通过自定义IP,但是一旦设计的文件有问题就需要重…...

开学必备数码清单,大学生开学必备数码好物分享

还有很多小伙伴不知道开学应该准备什么,在学校当中需要用到的数码产品,在宿舍娱乐使用的音箱、学习当中使用到的笔记本,这些都是我们可以准备的,还有一个小众的好物,能够让我们在学校当中提升生活的幸福感,…...

【面试题】常见前端基础面试题(HTML,CSS,JS)

大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库html语义化的理解代码结构: 使页面在没有css的情况下,也能够呈现出好的内容结构有利于SEO: 爬虫根据标签来分配关键字的权重,因此可以和搜索引擎…...

Vue (4)

文章目录1. 绑定样式1.1 绑定 class 样式1.2 绑定 style 样式2. 条件渲染2.1 v-show2.2 v-if3. 列表渲染3.1 v-for3.2 key 的作用与原理3.3 列表过滤3.4 列表排序1. 绑定样式 说 绑定样式 前&#xff0c;先准备好 以下几个 样式 : <style>.basic {width: 400px;height: 1…...

静态库和动态库的制作

一、什么叫做库&#xff1a; 库&#xff1a;二进制的程序&#xff0c;能被操作系统载入内存中执行 二、Linux下的库有两种&#xff1a;静态库和共享库(动态库)&#xff0c;二者的不同点在于代码载入的时刻不同。 A、静态库在程序编译的时候并会被连接到目标代码中&#xff0c;程…...

Oracle实现高可用性的工具(负载均衡/故障切换)

Oracle实现高可用性的工具&#xff08;负载均衡/故障切换&#xff09;1 Oracle RAC故障转移负载均衡2 Data Guard负载均衡-读写分离Data Guard Broker3 GDSGSM&#xff1a;连接管理工具主要功能Data Guard Broker功能是监控Data Guard状态&#xff0c;当主库异常时自动切换角色…...

图解经典电路之OCL差分功放-三极管分立器件电路分析

下面从简到繁,从框架到细节的顺序讲解电路。即先讲框架,然后逐渐添加电路细节,所以大家跟上思路。 1、第一步,尽可能的抽象这个电路,等效如下: 图二 OCL等效电路 整个OCL电路,可以等效为一个大功率的运放,加上几个电阻电容构成了一个同向放大器,就是这么简单。 为了便…...

thymeleaf模板注入学习与研究--查找与防御

一、日常编码中常见的两种漏洞场景 1.1 模板参数外部可控 RequestMapping("/path")public String path(RequestParam String lang) {return lang ;}实际开发过程中 依靠我丰富的想象力只能想出 换主题 这种场景下可能会出现 大佬们自行脑补吧。 1.2 使用GetMappin…...

第七章:Linux最小化搭建环境解说2

配置IP地址&#xff1a;我们先要到网卡配置文件夹里&#xff0c;路径是/etc/sysconfig/network-scripts/&#xff0c;有点长&#xff0c;不过没事&#xff0c;我们要学会习惯&#xff0c;这还是经常用的。然后就是用ls命令查看下面有什么&#xff0c;只有一个文件ifcfg-ens160&…...

两道链表经典算法题---链表有无环(基础+进阶)

生活就像一盒巧克力&#xff0c;你永远不知道你会得到什么。——《阿甘正传》目前自己粗略的学完数据结构&#xff0c;正在开始刷算法题目。个人觉得算法是一个积累&#xff0c;循序渐进的的过程&#xff0c;需要不断加量&#xff0c;进而达到所谓的质。链表作为数据结构一个重…...

2023/1/14总结

今天学习的是c语法知识。 容器arry&#xff1a; 通俗来说这个容器就i是c语言的数组&#xff0c;和C中vevtor不同&#xff0c;arry是定长度的&#xff0c;而vector是动态数组。头文件为&#xff1a;<arry> 初始化&#xff1a; arry<数据类型&#xff0c;你所要声明…...

Python 之 NumPy 统计函数、数据类型和文件操作

文章目录一、统计函数1. 求平均值 mean()2. 中位数 np.median3. 标准差 ndarray.std4. 方差 ndarray.var()5. 最大值 ndarray.max()6. 最小值 ndarray.min()7. 求和 ndarray.sum()8. 加权平均值 numpy.average()二、数据类型1. 数据存储2. 定义结构化数据3. 结构化数据操作三、…...

互联网新时代要到来了(一)什么是Web3.0?

什么是Web3.0? tips&#xff1a;内容来自百度百科、知乎、搜狐新闻、李留白公众号、CSDN「Meta.Qing」博客等网页 什么是Web3.0?1.什么是Web3.0&#xff08;概念介绍&#xff09;&#xff1f;2.Web3.0简单理解3.Web3.0的技术特点4.Web3.0项目1.什么是Web3.0&#xff08;概念…...

[Yocto] 直接向deploy/images目录部署binary

最近用yocto的时候碰到一个问题,有一些IP的FW binary是从别的地方直接拿来的,没有source code,有一个需求就是需要把它用wks script的方式把它们打包到最后的image里,这篇文章就是来谈谈这个问题。 yocto patch/deploy等做了什么 首先,虽然我们的code,bbfile,或者说pa…...

HarmonyOS Connect原子化服务功能开发(Wi-Fi/Combo)设备控制开发与实现(二)

规设备控制 在“device”目录下的“DeviceApplication.java”文件中&#xff0c;在onInitialize函数中初始化应用。示例代码如下&#xff1a; Override public void onInitialize() {AiLifeServiceHelper.initApplication(this);DeviceHandlerAbility.register(this, "&qu…...

浅析 Makefile

Makefile逻辑 Makefile就是将一系列的工作流串在一起自动执行&#xff0c;构成Makefile最基本的要素是目标、依赖、命令。也就是为了实现目标需要哪些依赖并执行什么样的命令。 target: dependences1 dependences2 ... command1 command2 ...其中&#xff0c;target表示要生…...

怎么给网站做支付接口/seo网站优化策划书

Python注释&#xff08;多行注释和单行注释&#xff09;用法详解 Python单行注释 Python 中使用井号&#xff08;‘#’&#xff09;作为单行注释的符号&#xff0c;语法格式为&#xff1a; [rootkube python]# cat demo.py # -*- coding:utf-8 -*-#python script 注释#print(&…...

网站设计和建设自考题/广州网络营销推广公司

最近了解了下缓存技术&#xff0c;主要分为内存缓存 和磁盘缓存&#xff0c;然后分布式里面有一些消息的推送&#xff0c;节点的一些处理。现在很多的用OSCache,EhCache 等等&#xff0c;资料很多&#xff0c;暂时就不多说了&#xff0c;我这里仅仅为了了解缓存框架的的知识&am…...

网站开发公司的销售方式/宁波网站建设推广公司价格

一 宏观说明 [问题] Spring的声明式事务&#xff0c;我想就不用多介绍了吧&#xff0c;一句话“自从用了Spring AOP啊&#xff0c;事务管理真轻松啊&#xff0c;真轻松&#xff1b;事务管理代码没有了&#xff0c;脑不酸了&#xff0c;手不痛了&#xff0c;一口气全配上了事务&…...

阿里巴巴手工活加工平台/seo流量增长策略

写了个简单的代码&#xff0c;得分17/25 。 满分代码&#xff1a; 需要考虑好多的东西 #include <iostream> #include <vector> #include <algorithm> #include <string.h> using namespace std; int n; //有效位数string deal(string s, int&…...

怡清源在慧聪网网站建设情况/一个好的产品怎么推广

1、安装FB4.6 建议Google一份下载&#xff08;标准做法是以从官网下载&#xff0c;但需要先注册个人信息&#xff0c;然后等待官方回应&#xff0c;但这需要很久&#xff09; 2、安装Android3.2&#xff0c;创建模拟器 参见Android部分 3、在Android模拟器上安装最新的AIR 最…...

做cpa网站/网络运营seo是什么

TweetinShare35有人向你讲述过人生课堂或者哲学吗&#xff1f;这些人生课堂或者哲学会改变你一生的轨迹。 有时候&#xff0c;是读到的东西&#xff0c;有时候&#xff0c;是人生的一次经历&#xff0c;使你顿悟&#xff0c;茅塞顿开&#xff0c;领略到生活的灿烂与完美。思想的…...