开源数据库数据存储的实现路径分析

时间:2022-10-13 06:41:49

开源数据库数据存储的实现路径分析

摘 要 文章首先对PostgreSQL开源数据库的特点进行了简要分析,在此基础上对PostgreSQL开源数据库的数据存储实现路径进行论述。期望通过本文的研究能够对促进开源数据库的推广应用有所帮助。

【关键词】开源数据库 PostgreSQL 数据存储

数据库是一种能够对数据进行存储和管理的“仓库”,它是一个应用领域中通用的数据处理系统,是长期存储在计算机内可进行共享的数据集合。开源数据库是未进行加密,源代码为开放性的数据库,目前主流的开源数据库有MySQL数据库、PostgreSQL数据库、Ingres r3 数据库、MaxDB数据库、InterBase数据库,每个数据库均有其特性。本文以PostgreSQL数据库为对象,重点对其数据存储的实现路径进行研究。

1 PostgreSQL开源数据库的特点分析

PostgreSQL是一款具有丰富特色的开源数据库管理系统,其不但功能齐全,而且还具有商业级数据库管理系统的特性,在某些方面甚至超越了商业数据库。PostgreSQL可在各种平台上应用,支持异步Copy、预写日志容错、表空间机制,同时还支持多种字符编码,易于扩展,在多用户并发方面有着极其优异的表现。大体上可将PostgreSQL的特性归纳为以下几个方面:

1.1 开放性

PostgreSQL支持的数据类型较多,如IP地址、数组、几何图元、文本、数值等,同时该数据库还允许用户自定义正规的SQL类型。

1.2 可编程性

该数据库能够为用户提供大量的API,如OBDC、Libpq等,给用户的开发使用提供了条件。

1.3 可定制性

该数据库可以通过多种编程语言来实现函数功能,如PHP、Ruby、Java、C++等等。对于数据库而言,函数又被称之为存储过程,它的输出结果可以在查询中当做表来使用,这一特点使PostgreSQL具备了可定制的特性。

1.4 索引

在PostgreSQL数据库中,用户既可以使用数据库内置的GIN、Hash表、GiST进行索引,也可以自定义索引,GiST作为通用索引的基础结构,其为多种索引策略的实现提供了支撑。

2 PostgreSQL开源数据库的数据存储实现路径

对于PostgreSQL数据库而言,在存储层的设计中,需要重点考虑的问题是应通过何种方式存储对象规模,尤其是一些大数据的存储。

2.1 数据外存的实现

2.1.1 relation与外部文件的对应

用户是PostgreSQL数据库的使用者,对于这些使用者而言,每一个二维表都是一个逻辑概念,在逻辑当中包含了两部分内容,一部分是表定义,另一部分是表数据。前者的主要作用是对用户的逻辑进行展示,它需要被数据库系统保存,存放表定义的地方即表空间;后者从物理的角度上讲,是以文件的形式存储在操作系统当中,即可存放在系统的表空间当中,也可存放在用户自定义的表空间当中。数据一般都是以文件的形式被存储在表空间当中的,换言之数据是表空间的物理外在形式。从代码的角度进行分析,可通过relpathbackend函数对逻辑概念与物理存储之间的关系进行查看,具体步骤如下:先按照RelFileNode指定的关系,找出与外存相对应的文件或是文件位置,然后根据入口的第一个参数mode,拼接出外存文件的路径,再利用mode中的spcNode的值,判断应当在哪个表空间上进行物理存储操作,最后便可得出数据的具体存储位置。

2.1.2 系统relation的存储

对于PostgreSQL数据库系统而言,它的relation存储是将数据存放在预先创建的表空间当中,这里需要创建两个表空间,一个是base,另一个是global。

2.2 数据内存的实现

从操作系统的角度上讲,在PostgreSQL数据库当中,数据的存储就是对一些二进制的信息进行存储,整个存储过程无法获悉文件的内容,文件本身的逻辑含义主要取决于应用层面,读入的数据会存放于数据缓冲区当中,换言之,数据的逻辑含义始于缓冲区。

2.2.1 表数据页存储

在PostgreSQL开源数据库管理系统当中,数据的存储格式主要有以下几种类型:系统表数据、日志文件、用户表数据以及用户自行创建的数据等。由于数据对象的创建方式存在一定的差别,以序列和视图为例,它们的创建并不涉及任何数据,仅仅是一个单纯的定义,而用户自定义的表则是由定义和数据两部分组成,这些信息在实际存储中,会以tuple的形式存储于数据库系统当中,因此,在数据库的存储格式中,数据分为两个部分,一部分为页头,另一部分为tuple数据组。根据这一前提条件,通过对PagaAddltem函数中lower和upper变量赋值方式的分析,便可获得tuple的存储方式。

2.2.2 大数据的处理

系统表可用于视图、序列等定义信息的存储,每个表都是以元祖的形式存储在pg_class当中。由于每个表均与一个外存文件相对应,其文件名称则是以该对象的filenode号命名。Relfilenode的结构如下:

typedef struct RelFileNode

{

Oid spcNode; /*tablepace*/

Oid dbNode; /*database*/

Oid relNode; /*relation*/

}Relfilenode;

从上面这个结构当中可以看出,在PostgreSQL数据库系统当中,表空间、数据库、关系标识、物理存储是与该结构唯一对应的。如果一个文件当中存储的内容过多,在表超过1GB后,这些文件便会被分裂为大小在1GB左右的段,首段的文件名与filenode相同,其余各段则可用filenode1、filenode2、filenode3来表述,由此能够防止不同操作系统对文件大小的限制。

3 结论

综上所述,在大数据时代的背景下,开源数据库已经逐步成为业内研究的重点,尤其是与数据库关联最为密切的数据存储问题,更成为重中之重。本文主要针对主流开源数据库中的PostgreSQL进行了分析,并对其数据存储的实现路径进行了论述,以期能为开源数据库的推广使用提供帮助。

参考文献

[1]蔡佳作,欧尔格力.基于PostgreSQL的地理空间数据存储管理方法研究[J].青海师范大学学报(自然科学版),2016(06):67-68.

[2]陈恺萌,卢科,岳丽华.PostgreSQL闪存缓冲区置换算法扩展与性能验证[J].计算机科学与探索,2012(08):54-56.

[3]许彦.基于PostgreSQL存储引擎的多线程化方法研究与实现[D].武汉:华中科技大学,2012.

[4]董纪英,燕志伟,梁正玉.SQLite、MySQL、PostgreSQL关系型数据库管理系统比较[J].电脑编程技巧与维护,2014(07):98-99.

作者单位

云南电网有限责任公司信息中心 云南省昆明市 650200

上一篇:云计算在卫生职业教育资源共享中的应用 下一篇:度洛西汀与艾司西酞普兰治疗老年抑郁发作的对...