CN105824879B - 一种基于PostgreSQL块存储设备的迁移方法 - Google Patents

一种基于PostgreSQL块存储设备的迁移方法 Download PDF

Info

Publication number
CN105824879B
CN105824879B CN201610133040.2A CN201610133040A CN105824879B CN 105824879 B CN105824879 B CN 105824879B CN 201610133040 A CN201610133040 A CN 201610133040A CN 105824879 B CN105824879 B CN 105824879B
Authority
CN
China
Prior art keywords
postgresql
block
postgresql block
data
tables
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610133040.2A
Other languages
English (en)
Other versions
CN105824879A (zh
Inventor
朱晓伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Huaxun Ark Photoelectric Technology Co ltd
Shenzhen Huaxun Fangzhou Software Technology Co ltd
Original Assignee
Shenzhen Huaxun Fangzhou Software Technology Co Ltd
Shenzhen Huaxun Ark Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Huaxun Fangzhou Software Technology Co Ltd, Shenzhen Huaxun Ark Technology Co Ltd filed Critical Shenzhen Huaxun Fangzhou Software Technology Co Ltd
Publication of CN105824879A publication Critical patent/CN105824879A/zh
Application granted granted Critical
Publication of CN105824879B publication Critical patent/CN105824879B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于PostgreSQL块存储设备的迁移方法,利用PostgreSQL块存储设备读写模块对PostgreSQL块进行读写,所述PostgreSQL块存储设备读写模块通过PostgreSQL块‑数据表之间的映射关系表和空闲PostgreSQL块表对PostgreSQL块存储设备中的PostgreSQL块进行管理,将所述PostgreSQL块‑数据表之间的映射关系表和所述空闲PostgreSQL块表从原库复制到新库,将PostgreSQL块存储设备从原库所在的计算机迁移到新库所在的计算机。本发明基于PostgreSQL块存储设备的迁移方法将数据库在不同的系统之间进行迁移及其简单,对操作人员专业知识要求不高。查询速度、读写速度能够有极大提升,在相同的后端存储情况下能够达到10%~20%的速度提升。这个提升对于数据库而言是十分可观的。

Description

一种基于PostgreSQL块存储设备的迁移方法
技术领域
本发明涉及一种PostgreSQL数据库存储设备的迁移方法,尤其涉及一种基于PostgreSQL块存储设备的迁移方法。
背景技术
随着互联网、移动互联网和物联网的发展,我们迎来了一个海量数据的时代,而数据库内保存的数据也越来越多,而我们需要的查询时间反而要越来越小。现在的众多应用场景都需要后台的存储具有高并发,高容量,高响应。高速的入库需求迫使我们不得不放弃实时索引,而大数据量的数据扫描又被存储端的I/O所限制。现在的PostgreSQL数据库系统中,高并发的多数据库扫描需要碰到基本都是随机读,而与此同时,普通磁盘的吞吐量已经不能满足需求。
为了适应大数据量的应用场景,官方推出的PostgreSQL-XC、PostgreSQL-XL这两个MPP数据库还没有成熟,而且还存在很多安全性问题。而传统的提速方案仅仅是利用集中式存储的高I/O(输入/输出)来在一定程度上提高整个系统的。但这种提升依旧存在很大的资源浪费。
如图1所示,原有的PostgreSQL数据库系统底层存储架构在文件系统上,从表到磁盘需要经过:表空间,文件系统,逻辑卷、磁盘这四层最终才会写入到物理磁盘内。
这样的架构首先会使得磁盘的I/O形成衰减。最终的磁盘I/O利用率只能达到80%左右,甚至更低。其次,当数据库表存在大量小表的情况下,势必会增加文件系统的压力。而且对于数据库操作而言,表的写入读出都较为随机,极容易造成磁盘碎片,而大量的随机读写,也必将会使得整个数据的读写性能下降。对于小数据量的数据库而言,现有的缺点也许不明显。但现在更多的使用场景是大数据量、高并发、高I/O。这些使用场景下,这些缺点将会大大影响数据库性能。此外在不同的操作系统迁移中也需要极复杂的数据库迁移操作。
普通磁盘的I/O速度较低,传统的解决方法是使用集中式存储(即磁盘阵列)。这种方式只是简单的提高磁盘的I/O速度,而且成本极高,具有一定的局限性。
如图2和图3所示,PostgreSQL数据库系统现有的后台存储架构:
数据库的数据操作每条记录都有几个主要标识。表ID、记录所在black id、文件类型、行记录对应的标识。现有的PostgreSQL数据库系统读写表操作需要:
a根据表ID查找到这个表的表空间,然后定位到文件系统中表空间的位置。
b根据文件类型要获取到指定的表文件。一般一个表会包含3种类型的文件。
fsm文件:其中存放了数据表文件中空闲空间的信息。
vm文件:标记了数据表文件中哪些文件块没有失效的元组。
表数据文件:此文件主要用于存储数据,但是此文件大小会有一定的限制,普通情况下会保存2G,超过2G的文件会分文件保存。
c根据记录号以及fsm文件,定位page。
而一般的操作系统对于打开的文件数会有限制。PostgreSQL数据库系统内部使用自己的虚拟文件管理来管理文件句柄,来保证能够同时打开很多的表。对于数据库而言可能同时存在很多的表,而PostgreSQL数据库系统采用1个表多个文件方式来保存数据。当打开一个文件的时候,会首先到文件句柄管理中找一下是不是存在已经打开的文件句柄。根据文件句柄设定一下offset。
d从文件中取到对应的page,并取到对应的行。
根据记录的blockid定位到文件,读取指定大小的块。而这些记录就保存在page内。
现有技术中,采用集中式存储作为数据库后端。
1、采用集中式存储(磁盘阵列等)做为存储后端。把集中式存储提供的磁盘挂载到PostgreSQL数据库系统所安装的机器。并根据不同的操作系统格式化成不同的文件系统。
2、把数据库中的数据指定到集中式存储提供的磁盘。
此种方法仅仅硬性提高后端的I/O吞吐量,并没有从原理上提高底层I/O的利用率。而且就安全性而言,这种方法并没有对数据做任何层面的保护,依旧让数据暴露在外。只能够在一定程度上实现数据库系统的提速。但是对于高安全高性能的需求来说,我们不能仅仅依靠这种纯硬件的加速而忽略软件本身的优化。
以上是原有的PostgreSQL数据库系统存储架构。以上结构存在以下几个缺点:
第一、数据库在不同的系统之间进行迁移极其复杂,对操作人员专业知识要求较高。
第二、对磁盘的使用必经过文件系统层。
就linux系统下较为流行的文件系统而言,采用64位空间来记录块数量和i-节点数量,对于数据库系统,可能存在及大量的表,每个表都将可能至少存在3个以上的文件,导致一个文件夹内存在极多的文件。
文件系统进行块分配时,基本上都是按照4K一个块的模式进行分配。同时我们数据库申请的时候都是以8K为单位进行申请。也就是说系统分配的块总是比我们的表的块要小。这样导致的直接问题就是数据库的业务块杂乱的分配到磁盘上。导致的直接问题就是磁盘寻道时间长,读写速度减慢。
假如我们的数据库中存在一个极大的表,文件系统在处理的时候效率极其低。例如,在ext3文件系统中100MB的文件就需要近25600个数据块。而对于PostgreSQL数据库系统而言,达到或超过GB级别的表处理会很常见,而且是随机的读写。
第三、文件系统的扩容也非常麻烦。除了已知的极个别商业文件系统外,其他的文件系统扩容多会要求关闭数据库。
第四、数据库数据文件直接暴露在操作系统中,数据存在安全隐患,数据安全也就得不到保证,对于一些对安全级别要求较高的使用环境而言是个极大的安全漏洞。
发明内容
本发明要解决的技术问题是提供一种基于PostgreSQL块存储设备的迁移方法,该方法将数据库在不同的系统之间进行迁移及其简单,对操作人员专业知识要求较高。
为了解决上述技术问题,本发明基于PostgreSQL块存储设备的迁移方法,利用PostgreSQL块存储设备读写模块对PostgreSQL块进行读写,所述PostgreSQL块存储设备读写模块通过PostgreSQL块-数据表之间的映射关系表和空闲PostgreSQL块表对PostgreSQL块存储设备中的PostgreSQL块进行管理,将所述PostgreSQL块-数据表之间的映射关系表和所述空闲PostgreSQL块表从原库复制到新库,将PostgreSQL块存储设备从原库所在的计算机迁移到新库所在的计算机。
A、在数据库后台驱动层中,PostgreSQL块存储设备读写模块的驱动完成对块文件的操作,其主要任务为:
a、通过文件句柄管理器管理上层业务对底层设备的读写接口,实现提供高并发的读写接口;
b、实现对PostgreSQL块存储设备的覆盖写,直接定位到PostgreSQL块存储设备的指定位置,并写入指定长度的数据;
B、根据所述PostgreSQL块-数据表之间的映射关系表oid、表空间定位到指定块设备的指定位置,通过表的pageid定位到块设备的某个偏移。
PostgreSQL数据库系统中的每一个表分配有至少一个所述PostgreSQL块,而且可动态地增量分配PostgreSQL块;
每个PostgreSQL块可写入512个8KB的PostgreSQL块数据库系统的页,一个块设备可以包含无数多个表,一个表将可以包含无限多个PostgreSQL块,这些块文件信息被保存在PostgreSQL块-数据表之间的映射关系表内;
通过1个oid能获取到一个数据表的所有PostgreSQL块的信息,而这些PostgreSQL块信息会顺序地组成整个的所述PostgreSQL块-数据表的文件,这个表的pageid*8k就是这个表内部的偏移,同时也就能够确定是这个块文件的第几个块,至此获得我们想要获取的页在块设备内位置。
在PostgreSQL块的初始页新增验证码,并在新增数据加载模块,以及验证模块。
PostgreSQL存储设备中的第一个PostgreSQL块被分配为用于验证的PostgreSQL块,此块内保存PostgreSQL数据库的唯一验证码,此验证码为128位,在集群迁移或者数据库静态恢复时候,可以通过提供验证码来通过验证,获取PostgreSQL数据库中的数据。
所述PostgreSQL块存储设备读写模块架构在PostgreSQL数据库系统上。
所述PostgreSQL块-数据表之间的映射关系表包括字段Relfilenode、Reltablespace、Forknum、Blockid、Blockno,所述空闲PostgreSQL块表包括字段Blockid、Isfree、Dev。
所述PostgreSQL块存储设备读写模块,具有以下子模块:
分配PostgreSQL块的子模块,
回收PostgreSQL块的子模块,
定位PostgreSQL块的子模块,
读出PostgreSQL块中数据的子模块,
写入PostgreSQL块中数据的子模块。
所述分配PostgreSQL块的子模块采用就近分配策略或冷热数据表分层分配策略给PostgreSQL数据表分配PostgreSQL块,所述就近分配策略是PostgreSQL块就近分配策略或空闲PostgreSQL块表记录就近分配策略,所述冷热数据表分层分配策略是常用数据表分配策略或近期使用数据表分配策略,所述PostgreSQL块就近分配策略是在数据表上次分配的PostgreSQL块前后就近寻找空闲PostgreSQL块分配给数据表,所述空闲PostgreSQL块表记录就近分配策略是从空闲PostgreSQL块表记录中寻找第一个空闲PostgreSQL块,所述常用数据表分配策略是经常使用的数据表优先分配到较快的PostgreSQL块设备上,所述近期使用数据表分配策略是将近期使用数据表优先分配到较快的PostgreSQL块设备上,所述冷热数据表分层分配策略用于具有两块以上不同读写速度的PostgreSQL块设备上;
所述回收PostgreSQL块的子模块用于回收数据表不再使用的PostgreSQL块,从PostgreSQL块-数据表之间的映射关系表中删除对应的PostgreSQL块记录,到空闲表中将相应PostgreSQL块的记录设置为空闲;
所述定位PostgreSQL块的子模块用于将数据表中的页定位到PostgreSQL块设备指定的位置上;
所述读出PostgreSQL块中数据的子模块用于读取指定块内指定位置指定大小的数据;
所述写入PostgreSQL块中数据的子模块用于写入指定块内指定位置指定大小的数据。
所述写入PostgreSQL块中数据的子模块以加密方式将数据写入PostgreSQL块中;相应地,
所述读出PostgreSQL块中数据的子模块以解密的方式将数据读出返回给数据库业务层。
所述加密的方式是采用将用户密码与数据异或计算后进行存储加密的方式;
所述解密的方式是采用将用户密码与从PostgreSQL块中读出的数据异或计算后反回给数据库业务层加密的方式。
所述空闲PostgreSQL块表中的Dev字段对不同的存储设备进行标识实现扩容。
所述PostgreSQL块是分配给PostgreSQL数据库系统中数据表的最小单位,其特征在于:所述PostgreSQL块的存储容量大于4KB。
所述PostgreSQL块的存储容量是8KB的正整数倍。
所述PostgreSQL块的存储容量是8KB之2的自然数次方倍。
所述PostgreSQL块的存储容量是1MB、2MB、4MB、8MB、16MB、32MB、64MB、128MB、256MB、512MB或1024MB。
本发明基于PostgreSQL块存储设备的迁移方法与现有技术相比具有以下有益效果。
1)数据库在不同的系统之间进行迁移及其简单,对操作人员专业知识要求不高。
2)数据库业务和数据分离。只要是同一个版本的数据库,就能够在不同的操作系统中自由迁移。只要能够通过设定在数据块头部的验证码,就能够实现数据库的直接挂载。能够自由的从linux不同版本之间进行迁移,也能够和windows操作系统平台进行相互迁移。
3)数据库的数据将会更为安全。数据库的数据将按照我们制定的规则保存到块设备内,从安全上来说更为安全。而且,由于使用分布式存储,将会使得数据将会分片保存,并保存多份到不同的数据节点内,就安全度而言是单磁盘百倍以上。
4)查询速度、读写速度能够有极大提升,在相同的后端存储情况下能够达到10%~20%的速度提升。这个提升对于数据库而言是十分可观的。
附图说明
下面结合附图和具体实施方式对本发明的PostgreSQL块、PostgreSQL块设备读写存储模块及基于PostgreSQL块存储设备的迁移方法作进一步的详细描述。
图1是现有技术中操作系统的文件系统读写分层结构示意图。
图2是现有技术中操作系统的文件系统存储空间分配结构示意图。
图3是现有技术中操作系统的文件系统磁头读写原理示意图。
图4是本发明的PostgreSQL块、PostgreSQL块设备读写存储模块及基于PostgreSQL块存储设备的迁移方法的结构、原理示意图。
具体实施方式
实施例一:
如图4所示,本发明的PostgreSQL块是分配给PostgreSQL数据库系统中数据表的最小单位,所述PostgreSQL块的存储容量等于4MB。
当然,也可以是,所述PostgreSQL块的存储容量大于4KB。
还可以是,所述PostgreSQL块的存储容量是8KB的正整数倍。
又可以是,所述PostgreSQL块的存储容量是8KB之2的自然数次方倍。
更可以是,所述PostgreSQL块的存储容量是1MB、2MB、8MB、16MB、32MB、64MB、128MB、256MB、512MB或1024MB。
实施例二:
如图4所示,本发明的PostgreSQL块存储设备读写模块是对PostgreSQL块存储设备中如前面所述的PostgreSQL块进行管理的PostgreSQL块存储设备读写模块。
所述PostgreSQL块存储设备读写模块可以架构在PostgreSQL数据库系统上。
所述PostgreSQL块存储设备读写模块通过PostgreSQL块-数据表之间的映射关系表和空闲PostgreSQL块表对PostgreSQL块存储设备中的PostgreSQL块进行管理。
所述PostgreSQL块-数据表之间的映射关系表包括字段Relfilenode、Reltablespace、Forknum、Blockid、Blockno,所述空闲PostgreSQL块表包括字段Blockid、Isfree、Dev。
所述PostgreSQL块存储设备读写模块,具有以下子模块:
分配PostgreSQL块的子模块,
回收PostgreSQL块的子模块,
定位PostgreSQL块的子模块,
读出PostgreSQL块中数据的子模块,
写入PostgreSQL块中数据的子模块。
所述分配PostgreSQL块的子模块采用就近分配策略或冷热数据表分层分配策略给PostgreSQL数据表分配PostgreSQL块,所述就近分配策略是PostgreSQL块就近分配策略或空闲PostgreSQL块表记录就近分配策略,所述冷热数据表分层分配策略是常用数据表分配策略或近期使用数据表分配策略,所述PostgreSQL块就近分配策略是在数据表上次分配的PostgreSQL块前后就近寻找空闲PostgreSQL块分配给数据表,所述空闲PostgreSQL块表记录就近分配策略是从空闲PostgreSQL块表记录中寻找第一个空闲PostgreSQL块,所述常用数据表分配策略是经常使用的数据表优先分配到较快的PostgreSQL块设备上,所述近期使用数据表分配策略是将近期使用数据表优先分配到较快的PostgreSQL块设备上,所述冷热数据表分层分配策略用于具有两块以上不同读写速度的PostgreSQL块设备上;
所述回收PostgreSQL块的子模块用于回收数据表不再使用的PostgreSQL块,从PostgreSQL块-数据表之间的映射关系表中删除对应的PostgreSQL块记录,到空闲表中将相应PostgreSQL块的记录设置为空闲;
所述定位PostgreSQL块的子模块用于将数据表中的页定位到PostgreSQL块设备指定的位置上;
所述读出PostgreSQL块中数据的子模块用于读取指定块内指定位置指定大小的数据;
所述写入PostgreSQL块中数据的子模块用于写入指定块内指定位置指定大小的数据。
所述写入PostgreSQL块中数据的子模块以加密方式将数据写入PostgreSQL块中;相应地,
所述读出PostgreSQL块中数据的子模块以解密的方式将数据读出返回给数据库业务层。
所述加密的方式是采用将用户密码与数据异或计算后进行存储加密的方式;
所述解密的方式是采用将用户密码与从PostgreSQL块中读出的数据异或计算后反回给数据库业务层解密的方式。
所述空闲PostgreSQL块表中的Dev字段对不同的存储设备进行标识实现扩容。
将所述PostgreSQL块-数据表之间的映射关系表和所述空闲PostgreSQL块表从原库复制到新库,将PostgreSQL块存储设备从原库所在的计算机迁移到新库所在的计算机。
实施例三:
如图4所示,本发明基于PostgreSQL块存储设备的迁移方法,利用如前面所述的PostgreSQL块存储设备读写模块对如前面所述的PostgreSQL块进行读写。
A、在数据库后台驱动层中,PostgreSQL块存储设备读写模块的驱动完成对块文件的操作,其主要任务为:
a、通过文件句柄管理器管理上层业务对底层设备的读写接口,实现提供高并发的读写接口;
b、实现对PostgreSQL块存储设备的覆盖写,直接定位到PostgreSQL块存储设备的指定位置,并写入指定长度的数据;
B、根据所述PostgreSQL块-数据表之间的映射关系表oid、表空间定位到指定块设备的指定位置,通过表的pageid定位到块设备的某个偏移。
PostgreSQL数据库系统中的每一个表分配有至少一个所述PostgreSQL块,而且可动态地增量分配PostgreSQL块;
每个PostgreSQL块可写入512个8KB的PostgreSQL块数据库系统的页,一个块设备可以包含无数多个表,一个表将可以包含无限多个PostgreSQL块,这些块文件信息被保存在PostgreSQL块-数据表之间的映射关系表内;
通过1个oid能获取到一个数据表的所有PostgreSQL块的信息,而这些PostgreSQL块信息会顺序地组成整个的所述PostgreSQL块-数据表的文件,这个表的pageid*8k就是这个表内部的偏移,同时也就能够确定是这个块文件的第几个块,至此获得我们想要获取的页在块设备内位置。
如图4所示,详细设计如下:
创建PostgreSQL块-数据表之间的映射关系表和空闲PostgreSQL块表。
表一:PostgreSQL块-数据表之间映射关系表
字段 类型 描述
1 Relfilenode(表编号) oid 表ID
2 Reltablespace(表空间编号) oid 表空间ID
3 Forknum(文件类型) Int2 表fork类型
4 Blockid(块编号) oid 表所占用的块ID
5 Blockno(块位置) oid 被占用的块所在数据表中的位置
表二:空闲PostgreSQL块表
字段 类型 描述
1 Blockid(块编号) oid 块ID
2 Isfree(占用标识) bool 是否被使用
3 Dev(设备标识) string 块设备标识
A首先我们把PostgreSQL块存储设备在逻辑上以4MB为单位分割为N个PostgreSQL块。
一般情况下我们把PostgreSQL块存储设备按照4MB为单位进行分割。我们只需要通过PostgreSQL块存储设备的总容量除以一个PostgreSQL块的容量计算出PostgreSQL块存储设备的总块数即可,不需要对PostgreSQL块存储设备进行扫描,这个分配时间极短。比如2T的PostgreSQL块存储设备只需要分成524288个PostgreSQL块,我们只需要在空闲PostgreSQL块表中新增524288条记录,blockid从0--524287递增即可。同时标注isfree为true。
B、数据表的存储空间以4MB为单位进行分配。
按照PostgreSQL数据库系统的流程而言,一个表实际占用空间是按需分配的。我们修改PostgreSQL数据库系统后台驱动文件storage/smgr/smgr.c类型typedef structf_smgr中需要的方法进行重写。
包括{
mdinit,
mdclose,
mdcreate,
mdexists,
mdunlink,
mdextend,
mdprefetch,
mdread,
mdwrite,
mdnblocks,
mdtruncate,
mdimmedsync,
mdpreckpt,
mdsync,
mdpostckpt
}
这些方法的具体实现在md.c文件中。(此文件中的其他方法也要进行修改)
把各个方法中涉及到的MdfdVec进行修改。
修改的主要思想为:
原本SMgrRelation reln,ForkNumber forknum两个参数定位到文件系统的表文件修改为定位到块设备的offset。我们能根据reln获取到relfilenode,reltablespace,forknum我们从PostgreSQL块-数据表之间的映射关系表中能够定位到我们的表所占用的数据。保证(pageno+1)*4*1024KB>reln.pageid*8KB>pageno*4*1024KB。
假如PostgreSQL块-数据表之间的映射关系表中不存在,说明我们需要新增一个PostgreSQL块给数据表。这时我们从空闲PostgreSQL块表中直接搜到一个没被使用的块设备就可以直接使用。直接避免文件系统在处理大文件时候的繁杂分配过程。
假如PostgreSQL块-数据表之间的映射关系表中存在,我们就能把PostgreSQL块存储设备直接定位到pageno*4*1024KB+(reln.pageid%512)*8KB。读出这个8K数据即可。
PostgreSQL数据库业务到磁盘的中间过程及其简单。磁盘利用率极高。
C、PostgreSQL块存储设备的扩容。
当我们的PostgreSQL块存储设备容量不够的时候,我们的分布式存储能够极容易给其扩容。只需要在空闲PostgreSQL块表新增新条目即可。扩容的方式有两种:一种方式是原有的块设备扩容;另一种方式是新增块设备。对于前者我们更新PostgreSQL块-数据表之间的映射关系表,比如从2TB新增到4TB,我们只需要新插入524288条记录,524288-1048575递增即可。对于后者,比如新增2T块设备。我们新增524287条记录,blockid从0-524287递增,dev能够定位即可。
D、数据库迁移。
数据库业务层跟数据层分割。把块设备直接挂载到新的节点上。这样上层的系统错误不会影响到底层数据。
E、数据安全。
PostgreSQL块存储设备选择规则可自定义,在B步骤中,我们是顺序的选择,我们也可以在我们的选择方法中添加一些规则(比如我们可以在其中插入一致性hash算法),打乱我们数据库的存储规则,保证数据安全。
本发明的关键点如下。
1)PostgreSQL数据库系统后台存储以裸盘为基础进行保存。
2)PostgreSQL数据库系统迁移的跨操作系统直接迁移,以及验证。
3)PostgreSQL数据库系统对分布式文件系统(ceph)块设备的直接支持。
与现有技术相比,本发明的有益效果如下。
1)插入和查询速度更快。
2)迁移更灵活。
3)数据更为安全。
4)PostgreSQL数据库系统业务和数据存储相分离。
需要说明的是,以上参照附图所描述的各个实施例仅用以说明本发明而非限制本发明的范围,本领域的普通技术人员应当理解,在不脱离本发明的精神和范围的前提下对本发明进行的修改或者等同替换,均应涵盖在本发明的范围之内。此外,除上下文另有所指外,以单数形式出现的词包括复数形式,反之亦然。另外,除非特别说明,那么任何实施例的全部或一部分可结合任何其它实施例的全部或一部分来使用。

Claims (9)

1.一种基于PostgreSQL块存储设备的迁移方法,其特征在于:利用PostgreSQL块存储设备读写模块对PostgreSQL块进行读写,所述PostgreSQL块存储设备读写模块通过PostgreSQL块-数据表之间的映射关系表和空闲PostgreSQL块表对PostgreSQL块存储设备中的PostgreSQL块进行管理,将所述PostgreSQL块-数据表之间的映射关系表和所述空闲PostgreSQL块表从原库复制到新库,将PostgreSQL块存储设备从原库所在的计算机迁移到新库所在的计算机;
PostgreSQL数据库系统中的每一个表分配有至少一个所述PostgreSQL块,而且可动态地增量分配PostgreSQL块;
每个PostgreSQL块可写入512个8KB的PostgreSQL块数据库系统的页,一个块设备可以包含无数多个表,一个表将可以包含无限多个PostgreSQL块,这些块文件信息被保存在PostgreSQL块-数据表之间的映射关系表内;
通过所述PostgreSQL块-数据表之间的映射关系表的1个对象标识符oid能获取到一个数据表的所有PostgreSQL块的信息,而这些PostgreSQL块信息会顺序地组成整个的所述PostgreSQL块-数据表的文件,这个表的页面标识符pageid*8k就是这个表内部的偏移,同时也就能够确定是这个块文件的第几个块,至此获得我们想要获取的页在块设备内位置。
2.根据权利要求1所述的基于PostgreSQL块存储设备的迁移方法,其特征在于:
A、在数据库后台驱动层中,PostgreSQL块存储设备读写模块的驱动完成对块文件的操作,其主要任务为:
a、通过文件句柄管理器管理上层业务对底层设备的读写接口,实现提供高并发的读写接口;
b、实现对PostgreSQL块存储设备的覆盖写,直接定位到PostgreSQL块存储设备的指定位置,并写入指定长度的数据;
B、根据所述PostgreSQL块-数据表之间的映射关系表oid、表空间定位到指定块设备的指定位置,通过表的pageid定位到块设备的某个偏移。
3.根据权利要求1所述的基于PostgreSQL块存储设备的迁移方法,其特征在于:在PostgreSQL块的初始页新增验证码,并在新增数据加载模块,以及验证模块。
4.根据权利要求1所述的基于PostgreSQL块存储设备的迁移方法,其特征在于:PostgreSQL存储设备中的第一个PostgreSQL块被分配为用于验证的PostgreSQL块,此块内保存PostgreSQL数据库的唯一验证码,此验证码为128位,在集群迁移或者数据库静态恢复时候,可以通过提供验证码来通过验证,获取PostgreSQL数据库中的数据。
5.根据权利要求1至4之一所述的基于PostgreSQL块存储设备的迁移方法,其特征在于:所述PostgreSQL块存储设备读写模块架构在PostgreSQL数据库系统上。
6.根据权利要求5所述的基于PostgreSQL块存储设备的迁移方法,其特征在于:所述PostgreSQL块-数据表之间的映射关系表包括字段:表编号Relfilenode、表空间编号Reltablespace、文件类型Forknum、块编号Blockid、块位置Blockno,所述空闲PostgreSQL块表包括字段:块编号Blockid、占用标识Isfree、设备标识Dev。
7.根据权利要求6所述的基于PostgreSQL块存储设备的迁移方法,其特征在于:所述PostgreSQL块存储设备读写模块,具有以下子模块:
分配PostgreSQL块的子模块,
回收PostgreSQL块的子模块,
定位PostgreSQL块的子模块,
读出PostgreSQL块中数据的子模块,
写入PostgreSQL块中数据的子模块。
8.根据权利要求7所述的基于PostgreSQL块存储设备的迁移方法,其特征在于:
所述分配PostgreSQL块的子模块采用就近分配策略或冷热数据表分层分配策略给PostgreSQL数据表分配PostgreSQL块,所述就近分配策略是PostgreSQL块就近分配策略或空闲PostgreSQL块表记录就近分配策略,所述冷热数据表分层分配策略是常用数据表分配策略或近期使用数据表分配策略,所述PostgreSQL块就近分配策略是在数据表上次分配的PostgreSQL块前后就近寻找空闲PostgreSQL块分配给数据表,所述空闲PostgreSQL块表记录就近分配策略是从空闲PostgreSQL块表记录中寻找第一个空闲PostgreSQL块,所述常用数据表分配策略是经常使用的数据表优先分配到较快的PostgreSQL块设备上,所述近期使用数据表分配策略是将近期使用数据表优先分配到较快的PostgreSQL块设备上,所述冷热数据表分层分配策略用于具有两块以上不同读写速度的PostgreSQL块设备上;
所述回收PostgreSQL块的子模块用于回收数据表不再使用的PostgreSQL块,从PostgreSQL块-数据表之间的映射关系表中删除对应的PostgreSQL块记录,到空闲表中将相应PostgreSQL块的记录设置为空闲;
所述定位PostgreSQL块的子模块用于将数据表中的页定位到PostgreSQL块设备指定的位置上;
所述读出PostgreSQL块中数据的子模块用于读取指定块内指定位置指定大小的数据;
所述写入PostgreSQL块中数据的子模块用于写入指定块内指定位置指定大小的数据。
9.根据权利要求8所述的基于PostgreSQL块存储设备的迁移方法,其特征在于:所述PostgreSQL块的存储容量大于4KB。
CN201610133040.2A 2015-12-17 2016-03-09 一种基于PostgreSQL块存储设备的迁移方法 Active CN105824879B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201510955290X 2015-12-17
CN201510955290 2015-12-17

Publications (2)

Publication Number Publication Date
CN105824879A CN105824879A (zh) 2016-08-03
CN105824879B true CN105824879B (zh) 2019-06-28

Family

ID=56987026

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610133040.2A Active CN105824879B (zh) 2015-12-17 2016-03-09 一种基于PostgreSQL块存储设备的迁移方法

Country Status (2)

Country Link
CN (1) CN105824879B (zh)
WO (1) WO2017101505A1 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105630879B (zh) * 2015-12-17 2019-03-26 深圳市华讯方舟软件技术有限公司 一种PostgreSQL块存储设备读写模块
CN105573678B (zh) * 2015-12-17 2018-11-09 深圳市华讯方舟软件技术有限公司 一种PostgreSQL块
CN105824879B (zh) * 2015-12-17 2019-06-28 深圳市华讯方舟软件技术有限公司 一种基于PostgreSQL块存储设备的迁移方法
CN106815298B (zh) * 2016-12-09 2020-11-17 中电科华云信息技术有限公司 基于块存储的分布式共享文件系统
CN111367470B (zh) * 2020-02-21 2021-09-17 苏州浪潮智能科技有限公司 分布式存储卷在线迁移方法、系统、装置及可读存储介质
CN111506685A (zh) * 2020-03-24 2020-08-07 山东省国土测绘院 一种融合制图方法、系统及电子设备
CN112035461B (zh) * 2020-06-17 2024-05-10 深圳市法本信息技术股份有限公司 数据库的表数据文件的迁移方法和系统
CN112380217B (zh) * 2020-11-17 2024-04-12 安徽鸿程光电有限公司 数据处理方法、装置、设备及介质
CN112800051A (zh) * 2020-12-28 2021-05-14 厦门市美亚柏科信息股份有限公司 一种PostGresSQL数据库删除记录的恢复方法和装置
CN114564443B (zh) * 2022-02-21 2024-10-15 苏州浪潮智能科技有限公司 数据迁移的控制方法、系统、计算机设备和存储介质
CN115098492A (zh) * 2022-05-17 2022-09-23 中国人民财产保险股份有限公司 一种分布式数据库的分库方法、装置及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1848118A (zh) * 2005-04-14 2006-10-18 三星电子株式会社 管理文件系统的设备和方法
CN100337220C (zh) * 2003-02-17 2007-09-12 西安三茗科技有限责任公司 一种Linux系统硬盘数据实时动态保护方法
CN100508502C (zh) * 2006-12-22 2009-07-01 清华大学 基于cam的宽带网络业务流按每流排队的可扩展的装置
CN101567003B (zh) * 2009-05-27 2012-05-16 清华大学 并行文件系统中资源的管理和分配方法
CN102622272A (zh) * 2012-01-18 2012-08-01 北京华迪宏图信息技术有限公司 基于集群和并行技术的海量卫星数据处理系统及处理方法
CN102768672A (zh) * 2012-06-12 2012-11-07 上海方正数字出版技术有限公司 一种磁盘空间管理方法和装置
CN102243629B (zh) * 2010-05-12 2013-02-27 北京安华金和科技有限公司 一种基于多级视图和触发器的数据库透明加解密方法
CN104462119A (zh) * 2013-09-18 2015-03-25 腾讯科技(深圳)有限公司 数据迁移方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100005077A1 (en) * 2008-07-07 2010-01-07 Kickfire, Inc. Methods and systems for generating query plans that are compatible for execution in hardware
CN105630879B (zh) * 2015-12-17 2019-03-26 深圳市华讯方舟软件技术有限公司 一种PostgreSQL块存储设备读写模块
CN105573678B (zh) * 2015-12-17 2018-11-09 深圳市华讯方舟软件技术有限公司 一种PostgreSQL块
CN105824879B (zh) * 2015-12-17 2019-06-28 深圳市华讯方舟软件技术有限公司 一种基于PostgreSQL块存储设备的迁移方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100337220C (zh) * 2003-02-17 2007-09-12 西安三茗科技有限责任公司 一种Linux系统硬盘数据实时动态保护方法
CN1848118A (zh) * 2005-04-14 2006-10-18 三星电子株式会社 管理文件系统的设备和方法
CN100508502C (zh) * 2006-12-22 2009-07-01 清华大学 基于cam的宽带网络业务流按每流排队的可扩展的装置
CN101567003B (zh) * 2009-05-27 2012-05-16 清华大学 并行文件系统中资源的管理和分配方法
CN102243629B (zh) * 2010-05-12 2013-02-27 北京安华金和科技有限公司 一种基于多级视图和触发器的数据库透明加解密方法
CN102622272A (zh) * 2012-01-18 2012-08-01 北京华迪宏图信息技术有限公司 基于集群和并行技术的海量卫星数据处理系统及处理方法
CN102768672A (zh) * 2012-06-12 2012-11-07 上海方正数字出版技术有限公司 一种磁盘空间管理方法和装置
CN104462119A (zh) * 2013-09-18 2015-03-25 腾讯科技(深圳)有限公司 数据迁移方法及装置

Also Published As

Publication number Publication date
WO2017101505A1 (zh) 2017-06-22
CN105824879A (zh) 2016-08-03

Similar Documents

Publication Publication Date Title
CN105824879B (zh) 一种基于PostgreSQL块存储设备的迁移方法
CN105630879B (zh) 一种PostgreSQL块存储设备读写模块
CN104246764B (zh) 利用非均匀散列函数在非均匀访问存储器中放置记录的方法和装置
CN109977111A (zh) 采用基于散列和基于树的键-值数据结构的数据管理系统
CN105573678B (zh) 一种PostgreSQL块
US9996557B2 (en) Database storage system based on optical disk and method using the system
Manzanares et al. {ZEA}, A Data Management Approach for {SMR}
CN107704194B (zh) 无锁io处理方法及其装置
JP2006293981A (ja) データベース格納方法、および、データベース格納システム
CN101241476A (zh) 一种虚拟存储系统和方法
US7921142B2 (en) Method and apparatus for storing and accessing data records on solid state disks
US10838624B2 (en) Extent pool allocations based on file system instance identifiers
CN111324305B (zh) 一种分布式存储系统中数据写入/读取方法
CN102915340A (zh) 一种扩展的基于b+树对象文件系统
US8131966B2 (en) System and method for storage structure reorganization
Rosenthal The medium-term prospects for long-term storage systems
Lindstrom et al. The design and analysis of bucketsort for bubble memory secondary storage
CN111309263B (zh) 一种分布式对象存储中的逻辑卷实现方法
CN116738511A (zh) 磁盘分块加密方法
CN107844592A (zh) 一种查询元数据的方法和装置
CN107451069A (zh) 基于预留空间的固态盘阵列的垃圾回收方法
Liang et al. Enabling a B+-tree-based data management scheme for key-value store over SMR-based SSHD
CN109597793B (zh) 一种提升文件系统io性能的方法
CN105404471A (zh) 一种分布式云存储高速缓存层实现方法
CN101859232A (zh) 一种可变长度数据存储接口

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 518102 Guangdong Province, Baoan District Xixiang street Shenzhen City Tian Yi Lu Chen Tian Bao Industrial District thirty-seventh building 3 floor

Applicant after: SHENZHEN HUAXUN FANGZHOU SOFTWARE TECHNOLOGY Co.,Ltd.

Applicant after: CHINA COMMUNICATION TECHNOLOGY Co.,Ltd.

Address before: 518102 Guangdong Province, Baoan District Xixiang street Shenzhen City Tian Yi Lu Chen Tian Bao Industrial District thirty-seventh building 3 floor

Applicant before: SHENZHEN HUAXUN FANGZHOU SOFTWARE TECHNOLOGY Co.,Ltd.

Applicant before: CHINA COMMUNICATION TECHNOLOGY Co.,Ltd.

COR Change of bibliographic data
GR01 Patent grant
GR01 Patent grant
PP01 Preservation of patent right

Effective date of registration: 20210630

Granted publication date: 20190628

PP01 Preservation of patent right
PD01 Discharge of preservation of patent

Date of cancellation: 20230421

Granted publication date: 20190628

PD01 Discharge of preservation of patent
TR01 Transfer of patent right

Effective date of registration: 20230606

Address after: 518102 room 404, building 37, chentian Industrial Zone, chentian community, Xixiang street, Bao'an District, Shenzhen City, Guangdong Province

Patentee after: Shenzhen Huaxun ark Photoelectric Technology Co.,Ltd.

Patentee after: SHENZHEN HUAXUN FANGZHOU SOFTWARE TECHNOLOGY Co.,Ltd.

Address before: 518102 3rd floor, building 37, chentian Industrial Zone, Baotian 1st Road, Xixiang street, Bao'an District, Shenzhen City, Guangdong Province

Patentee before: SHENZHEN HUAXUN FANGZHOU SOFTWARE TECHNOLOGY Co.,Ltd.

Patentee before: CHINA COMMUNICATION TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right