CN115658693A - 一种适用于海量栅格瓦片数据的高效优化存储方法 - Google Patents
一种适用于海量栅格瓦片数据的高效优化存储方法 Download PDFInfo
- Publication number
- CN115658693A CN115658693A CN202211368234.2A CN202211368234A CN115658693A CN 115658693 A CN115658693 A CN 115658693A CN 202211368234 A CN202211368234 A CN 202211368234A CN 115658693 A CN115658693 A CN 115658693A
- Authority
- CN
- China
- Prior art keywords
- tile
- data
- bloom filter
- file
- massive
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种适用于海量栅格瓦片数据的高效优化存储方法,包括以下步骤:步骤1,设计索引键;步骤2,消除瓦片数据冗余;步骤3,开启布隆过滤器;步骤4,调整块缓存大小;步骤5,增加库文件的大小,将海量的小文件紧缩、合并为较大的文件。本发明采用了业界有成熟理论支持、稳定可靠的开源KV存储LevelDB,并对其源码进行了有针对性的深入改良,对比自定义专有存储格式方式,保持了良好的通用性和兼容性,具有完备、丰富的编程接口,可以简单便利的实现跨平台、跨编程语言。对比采用专用文件系统的方式,也避免了实现和维护复杂性。
Description
技术领域
本发明涉及一种适用于海量栅格瓦片数据的高效优化存储方法。
背景技术
在WebGIS系统中,TMS(Tile Map Service,瓦片地图服务)是由开源地理空间基金会(Open Source Geospatial Foundation,OSGeo)定义和发布的一种地图瓦片规范。即通过定义统一的切图标准和独立服务接口,以地图切片的行列位置为基础参数直接访问栅格瓦片,利用局部性原理,提高地图的访问速度。
TMS的底层数据组织为瓦片金字塔模型,这是一种多层次的切片模型,即按照固定分辨率层级(比例尺)和Web墨卡托投影规则将地图数据按照行、列切成一定大小的图片(称为栅格瓦片),从顶层到底层,分辨率逐渐提高,行列数(即瓦片数量)也越来越多,一般采用四叉树的形式,从顶端开始,第0层1个瓦片,第1层4个,第2层16个……依次向下层级做切片,层级之间瓦片数量保持4倍的关系。当客户端需要显示某个层级、某个区域范围的地图时,可以将地理范围映射到瓦片坐标的图片索引(XYZ,XY为行、列坐标,Z是层级号,皆为正整数),依据XYZ参数从TMS服务请求这些瓦片,将得到的瓦片图片平铺拼接渲染出来即可,此过程并不涉及到任何请求范围之外的瓦片数据,很容易实现“按需显示”,这具有很高的效率,特别适合Web方式的地图展示。
地图栅格瓦片数据比较突出的特点是:数据量相当的巨大,切分后的小图片文件非常零碎,以包含整个中国范围(东经73~136度,北纬3~54度)的瓦片数据为例,在11层级下大约为12万张256*256像素的png图片文件,12层级瓦片数量是11级的4倍,以此类推,到了18级就达到了20亿张之多,每张瓦片文件大约1~4K字节,如果全部为文件形式,全部0~18级在磁盘上存储空间(占用空间)可以达到约8~10T字节,约27亿个小文件,对于在一般的通用文件系统(如NTFS,ext3等)中管理维护、备份恢复、迁移复制这些几十亿个小文件,是一个极其困难的问题。
目前,这些海量瓦片数据的一般的管理方式,一般有以下几种办法:
(1)最简单粗暴的办法,就是直接用文件系统简单分层管理所有离散瓦片文件,一般是先按照层级数字(Z)分第一层文件夹,再按照Y数字(纵坐标)分第二层文件夹、以X数字(横坐标)作为瓦片图片文件名。这种方式优点是简单直观,访问效率尚可(就是依赖文件系统本身的IO效率);缺点是海量的小文件会导致磁盘存储严重碎片化,严重影响IO性能,且数据可迁移性差,无论是数据备份、迁移或是恢复都耗时极其漫长,另外因为是“裸数据”存储,安全性也不好。
(2)使用通用关系数据库管理,即将每个瓦片作为一条独立记录,XYZ索引和图片都作为记录的字段,利用数据库的强大检索能力,快速的按需访问。这种方式的优点是可以充分利用数据库引擎的管理能力,同时也避免了直接管理海量零碎小文件,备份、迁移、安全性较好;缺点是数据量达到了十亿级别,还是太大了,超出一般数据库能力,成本不可接受。数据库中额外创建的索引占用空间也十分巨大,另外二进制的图片存储在数据库中,效率也很低下。在高并发的情况下,数据库访问将成为严重的瓶颈。
(3)采用特殊的、专门针对海量小文件优化的文件系统,如GFS、TFS、MongoFS等,这种方式相当于第一种方式的优化,只是把优化下沉到了文件系统层面,其缺点是实现比较复杂,需要安装和维护专门的文件系统,无法利用操作系统自带的文件系统的便利性,通用性差。
(4)其他自定义格式的方式,以自定义格式居多,一般是从消除零碎文件、提高访问速度、方便管理等角度,提出某种方式的紧缩格式,将小文件打包存储到较大的文件中。这种方式缺点也是比较复杂,自定义格式实现要考虑的因素比较多(如局部更新、索引效率、访问缓存等),可维护性和通用性更差。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种适用于海量栅格瓦片数据的高效优化存储方法,有效减小瓦片数据冗余和占用空间,实现高效瓦片数据访问,增强数据安全性,提高数据管理效率的目标。
本发明具体包括以下步骤:
步骤1,设计索引键;
步骤2,消除瓦片数据冗余;
步骤3,开启布隆过滤器;
步骤4,调整块缓存大小;
步骤5,增加库文件的大小,将海量的小文件紧缩、合并为较大的文件。
步骤1包括:瓦片索引XYZ坐标是一个三维点坐标,采用降维的办法,将瓦片索引XYZ坐标设计为一个9字节定长连续结构,其中瓦片层级Z用一个字节表示,行列坐标XY统一采用4字节的小端序integer表示,把ZYX的二进制值按顺序拼接到一起,形成一个9字节的连续值,其中Z值放在最前面,通过这种设计,任何一个瓦片的索引都能够用这个9字节的定长Key表示。
步骤2包括:不实际存储存在冗余或表示无效的瓦片图片,而是存储1个特殊的单字节值表示空白图(正常的图片必然大于1字节,所以可以有效区分正常图片和特殊值,特殊值可以表示0~255共256种空白图,如:0-无图空白、1-地面空白、2-水域空白,3-海洋空白等等)。
步骤3包括:在每个磁盘文件上加一层布隆过滤器,布隆过滤器的数据存储在磁盘文件中数据块的后面;布隆过滤器内部存储单个磁盘文件中包含的数据范围内所有Key的指纹信息,确定一个较为合适的布隆过滤器filter_policy参数值。布隆过滤器的误报率Pfp计算公式为:
其中,e表示自然常数,k表示哈希函数的个数;m表示布隆过滤器位数组的bit数容量(占用空间为m/8字节);n表示布隆过滤器数据集数量(即Key的个数);因此m/n表示每个Key平均使用的bit数bits_per_key;
布隆过滤器filter_policy参数就是确定合适的k和bits_per_key的值,k如果太大计算量太大,会影响效率,一般限制不超过30个;bits_per_key值越大,误报率越低,但位数组会占用很大的空间;
假设k取30,期望的误报率不超过1%,通过公式计算可得,bits_per_key约为10.17左右,取整为10,即如果文件中有100万个数据项(实际平均40~60万左右),那么布隆过滤器占用空间约为1.2M字节左右(100万*10/8),同时平均误报率低于1%。
步骤4包括:将块缓存大小设置为100M~300M之间。
步骤5包括:通过调整LevelDB的源代码,将库文件大小参数化,设定为64M~1G之间,在库文件大小为1G时,每个库文件能够存储大约40~60万个瓦片数据记录。
本发明具有如下有益效果:
(1)针对海量栅格瓦片数据难以管理维护、备份恢复、迁移复制问题,本发明提出的高效优化的存储结构可以有效解决。在实践中,使用了本发明的存储方法后,相对于离散文件存储方式,数据总体占用空间缩减至原来的10%以下,数据迁移备份的效率提高了几百倍。另外,瓦片数据不再以裸文件形式存储,有效的提高了数据的安全性(数据损坏丢失和数据泄露)。
(2)针对TMS服务对栅格瓦片极高效的离散化检索、查询和读取的要求,本发明中采用多种优化方法和手段,能提供亚毫秒级的数据查询效率,实际测试中,单个瓦片平均查询时间约0.05~0.5毫秒之间,基于本发明构建的TMS服务,能提供高性能、高并发的瓦片服务。对比通用关系数据库存储的方式性能更高、成本极低。
(3)本发明采用了业界有成熟理论支持、稳定可靠的开源KV存储LevelDB,并对其源码进行了有针对性的深入改良,对比自定义专有存储格式方式,保持了良好的通用性和兼容性,具有完备、丰富的编程接口,可以简单便利的实现跨平台、跨编程语言。对比采用专用文件系统的方式,也避免了实现和维护复杂性。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1是本发明设计的定长连续结构示意图。
具体实施方式
从栅格瓦片的使用原理(即TMS服务)上来看,服务端工作就是通过XYZ索引唯一定位到指定的瓦片,读取瓦片数据,并将瓦片数据作为图片格式返回给客户端。因此我们需要的是一种KV类型的数据存储结构,我们设计一种全局唯一的瓦片索引结构作为Key,将Key对应的单个瓦片图片二进制数据作为Value即可。
KV存储库种类很多,从效率、性能、特性等各方面来看,Google公司的开源产品LevelDB存储引擎是非常合适的选择,LevelDB是一款读写性能十分优秀的可持久化的嵌入式KV存储引擎,其实现原理是依据LSM-Tree(Log Structed-Merge Tree),单库可轻松管理TB甚至PB级数据,经优化和测试,对于十亿级瓦片记录的查询性能,也能保持在亚毫秒级,能很好的满足TMS性能要求。
经过反复的测试和评估,本发明选用了LevelDB作为底层存储引擎,并通过多种手段改进和优化,构建了一个适用于海量栅格瓦片数据的高效和实用的存储库管理系统。具体采用的方法如下:
(1)设计一种紧凑且高效的索引键:瓦片索引XYZ坐标本质上可看作一个“三维”点坐标,采用降维的办法,根据XYZ数值的特点,将这三个数值设计为一个紧凑的9字节定长连续结构,如图1所示;
瓦片层级Z一般最大为18,用一个字节表示足够了,中国全国范围内,根据Web墨卡托切片算法,行列坐标XY最大值不超过24000,这里统一采用4字节的integer(小端序)表示,把ZYX的二进制值按顺序拼接到一起,形成一个9字节的连续值,通过这种设计,任何一个瓦片的索引都可以用这个9字节的定长Key表示,这里把Z值放在最前面,是因为LevelDB的Key是有序的,可以使得Z值相同的瓦片集中存储在连续的区间,可以很好的利用LevelDB的局部性缓存特性,大大提高读取效率。
(2)消除瓦片数据冗余:真实瓦片数据的特点是存在大量的冗余或表示无效的数据,例如:街道地图的瓦片中,有大量的无任何有效信息的“空白”图片,表现为一张纯色的小图片,另外还有类似的,江河湖海水域面的蓝色纯色图片,在卫星影像瓦片中,除了上述“空白”图片之外,还存在大量的影像缺失区域,表现为一张“此区域无卫星图”的图片等等,通过对数据的统计和分析,发现在瓦片数据中此类图片占比较高,对此采取“短码存储”的方法来处理这类瓦片,具体做法是:不实际存储这些瓦片图片本身,而是存储1个特殊的单字节值表示空白图片(单个字节可以表示256种不同类型的短码),正常的瓦片是图片格式,不可能是1个字节的,因此很容易有效的区分开,使得此类瓦片数据记录总共仅需要10个字节即可表示,同一类的短码,其具体二进制数据,只需要存一份即可,在实际读取时,遇到Value为短码的做特殊处理(根据短码值代表的空白图片类型,直接返回对应的全局静态空白图片的二进制数组)即可还原为二进制的瓦片数据。
(3)开启布隆过滤器,提高查询效率。LevelDB查询操作在内存读未命中导致磁盘搜寻是一个比较耗时的操作,为了进一步减少磁盘读的次数,在每个磁盘文件上又加了一层布隆过滤器,它需要消耗一定的磁盘空间,但是在效果上可以直接将磁盘读次数大幅减少。布隆过滤器的数据存储在磁盘文件中数据块的后面。LevelDB的磁盘文件是分层存储的,它会先去Level 0查找,如果找不到继续去Level 1去找,一直递归到最底层。所以如果你去找一个不存在的key,就需要很多次磁盘文件读操作,会非常耗费时间。而布隆过滤器可以实现省去95%以上的磁盘文件搜寻的时间。布隆过滤器类似于一个内存Set结构,内部存储了指定磁盘文件一定范围内所有Key的指纹信息。当它发现某个key的指纹在Set集合里找不到,它就可以断定这个key肯定不存在。如果对应的指纹可以在集合里找到,此时并不能确定它就一定存在(因为不同的Key可能会生成同样的指纹),这就是布隆过滤器的误判率,误判率越低需要的Key指纹信息越多,对应消耗的内存空间也就越大。在使用布隆过滤器时,需要在内存消耗和性能之间做一个折衷选择。经过实际测试,确定了一个较为合适的布隆过滤器filter_policy参数值。
(4)调整块缓存大小,提高查询效率。LevelDB运行期间,在内存中存储了一批最近读写的热数据,如果请求的数据在热数据中查不到就需要去磁盘文件中去查找,效率就会大幅降低。为了降低磁盘文件的搜寻次数,增加了块缓存,缓存了近期频繁使用的数据块的内容。经过反复试验,在存储瓦片数据的场景下,将块缓存大小设置为100M~300M之间性价比较高,此时可以存储大约1000多个热点瓦片数据记录,考虑到WebGIS前端的浏览地图的操作特性(屏幕上总是展示和渲染某个局部地理区域),这十分符合TMS服务的特性,极大的提高了TMS服务的效率。
(5)增加库文件的大小,将海量的小文件紧缩、合并为较大的文件。LevelDB默认的库文件大小为2M字节,每个库文件大约只能存储几百个瓦片数据,这对于几十亿数据的瓦片数据并来说,紧缩合并的效果很不理想,本发明通过调整LevelDB的源代码,将库文件大小参数化,设定为64M~1G之间(根据存储瓦片的总量选择合适的大小),在库文件大小为1G时,每个库文件可以存储大约40~60万个瓦片数据记录,以18级总共20亿瓦片为例,实测全部的库文件只有800多个左右(由于消减冗余,实际数据比理论值大大减少),磁盘空间占用也降低到了不到1T,这使得对于栅格瓦片数据的管理维护、迁移备份等操作变得十分便利。按照一般固态硬盘的读写速度,拷贝800个1G大小的文件,只需要几分钟,而对于20亿个离散小文件,根据网上查到的资料,估算其拷贝耗时需要漫长十几甚至几十个小时。
本发明主要采用了以上5种优化方法和手段,基于开源LeveDB库,对其源码进行优化和改造,针对栅格瓦片数据的特性,设计出一种对海量的栅格瓦片数据进行高效、紧凑的封装存储结构,同时又能够满足TMS服务对瓦片极高效的离散化检索、查询和读取的要求。
具体实现中,本申请提供计算机存储介质以及对应的数据处理单元,其中,该计算机存储介质能够存储计算机程序,所述计算机程序通过数据处理单元执行时可运行本发明提供的一种适用于海量栅格瓦片数据的高效优化存储方法的发明内容以及各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,ROM)或随机存储记忆体(random access memory,RAM)等。
本领域的技术人员可以清楚地了解到本发明实施例中的技术方案可借助计算机程序以及其对应的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机程序即软件产品的形式体现出来,该计算机程序软件产品可以存储在存储介质中,包括若干指令用以使得一台包含数据处理单元的设备(可以是个人计算机,服务器,单片机。MUU或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本发明提供了一种适用于海量栅格瓦片数据的高效优化存储方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (6)
1.一种适用于海量栅格瓦片数据的高效优化存储方法,其特征在于,包括以下步骤:
步骤1,设计索引键;
步骤2,消除瓦片数据冗余;
步骤3,开启布隆过滤器;
步骤4,调整块缓存大小;
步骤5,增加库文件的大小,将海量的小文件紧缩、合并为较大的文件。
2.根据权利要求1所述的方法,其特征在于,步骤1包括:瓦片索引XYZ坐标是一个三维点坐标,采用降维的办法,将瓦片索引XYZ坐标设计为一个9字节定长连续结构,其中瓦片层级Z用一个字节表示,行列坐标XY统一采用4字节的小端序integer表示,把ZYX的二进制值按顺序拼接到一起,形成一个9字节的连续值,其中Z值放在最前面,通过这种设计,任何一个瓦片的索引都能够用这个9字节的定长Key表示。
3.根据权利要求2所述的方法,其特征在于,步骤2包括:不实际存储存在冗余或表示无效的瓦片图片,而是存储1个特殊的单字节值表示空白图。
5.根据权利要求4所述的方法,其特征在于,步骤4包括:将块缓存大小设置为100M~300M之间。
6.根据权利要求5所述的方法,其特征在于,步骤5包括:通过调整LevelDB的源代码,将库文件大小参数化,设定为64M~1G之间,在库文件大小为1G时,每个库文件能够存储大约40~60万个瓦片数据记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211368234.2A CN115658693A (zh) | 2022-11-03 | 2022-11-03 | 一种适用于海量栅格瓦片数据的高效优化存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211368234.2A CN115658693A (zh) | 2022-11-03 | 2022-11-03 | 一种适用于海量栅格瓦片数据的高效优化存储方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115658693A true CN115658693A (zh) | 2023-01-31 |
Family
ID=84995743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211368234.2A Pending CN115658693A (zh) | 2022-11-03 | 2022-11-03 | 一种适用于海量栅格瓦片数据的高效优化存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115658693A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093510A (zh) * | 2023-05-30 | 2023-11-21 | 中国人民解放军军事科学院国防科技创新研究院 | 大小端通用的缓存行高效索引方法 |
-
2022
- 2022-11-03 CN CN202211368234.2A patent/CN115658693A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093510A (zh) * | 2023-05-30 | 2023-11-21 | 中国人民解放军军事科学院国防科技创新研究院 | 大小端通用的缓存行高效索引方法 |
CN117093510B (zh) * | 2023-05-30 | 2024-04-09 | 中国人民解放军军事科学院国防科技创新研究院 | 大小端通用的缓存行高效索引方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7418544B2 (en) | Method and system for log structured relational database objects | |
CN100504854C (zh) | 文件管理方法 | |
US20120159098A1 (en) | Garbage collection and hotspots relief for a data deduplication chunk store | |
US9877031B2 (en) | System and method for multi-resolution raster data processing | |
CN111930767B (zh) | 一种基于多层缓存的矢量瓦片实时切片和更新方法 | |
CN109635068A (zh) | 云计算环境下的海量遥感数据高效组织及快速检索方法 | |
CN106682110B (zh) | 一种基于哈希格网索引的影像文件存储和管理系统及方法 | |
CN1184538A (zh) | 采用稀疏文件的实时数据迁移系统和方法 | |
CN107391391A (zh) | 在固态硬盘的ftl实现数据拷贝的方法、系统及固态硬盘 | |
CA2761553C (en) | Logical buffer pool extension | |
CN106354805A (zh) | 一种分布式存储系统NoSQL搜索缓存的优化方法和系统 | |
KR20090063733A (ko) | 다중 복제를 지원하는 분산 파일 시스템에서 데이터 서버의복구 방법 및 그에 적당한 메타데이터 스토리지 및 저장방법 | |
CN101587484B (zh) | 一种基于T-lt树的主存数据库的索引方法 | |
CN103383690A (zh) | 分布式数据存储方法及系统 | |
CN111125392A (zh) | 一种基于矩阵对象存储机制的遥感影像存储、查询方法 | |
CN1845093A (zh) | 一种属性可扩展的对象文件系统 | |
CN110727406A (zh) | 一种数据存储调度方法及装置 | |
CN115658693A (zh) | 一种适用于海量栅格瓦片数据的高效优化存储方法 | |
CN103399915A (zh) | 一种搜索引擎索引文件的优化读取方法 | |
CN113849478A (zh) | 一种云原生大数据分析引擎 | |
CN114357104A (zh) | 一种无索引地图切片聚合方法 | |
Dröge et al. | Query-adaptive data space partitioning using variable-size storage clusters | |
Min et al. | The mobile spatial DBMS for the partial map air update in the navigation | |
CN113535092B (zh) | 用于减少内存元数据的存储引擎、方法和可读介质 | |
Zhou et al. | Multiresolution spatial databases: Making web-based spatial applications faster |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |