使用iObjects java进行多进程生成缓存
来源:互联网 发布:全国各地一手车主数据 编辑:程序博客网 时间:2024/06/01 11:01
1.1 概述
SuperMap iObjects Java 9D版本开始支持多进程切图,可实现多机分发切图,更稳定、更高效;还提供了地图缓存检查和补切工具,使地图缓存生成操作更加可控。
在SuperMap iObjects Java产品安装目录下Bin文件夹下,如下.jar文件与多进程切图有关。
com.supermap.data.jar
com.supermap.mapping.jar
com.supermap.tilestorage.jar
com.supermap.data.processing.jar
下面,介绍如何通过命令行的方式进行多进程切图,切图结果检查以及补切问题瓦片。
1.2 多进程切图
多进程切图是按照指定的切图比例尺,将切图任务进行拆分,这样,就可以分配到多个进程中执行切图任务,因此,多进程切图分为以下几个步骤:
1. 生成缓存配置文件
2. 拆分任务
3. 执行多进程切图
1.2.1 生成缓存配置文件
进行地图缓存生成的第一步就是准备缓存配置文件*.sci,缓存配置文件中包含了切图范围、切图比例尺、瓦片存储类型、瓦片设置、数据库信息、缓存路径等信息,其中,缓存路径将以执行切图任务的命令行参数指定为准。
您可以使用SuperMap iDesktop配置一个缓存配置文件。
i注意
如果使用多进程切图并且缓存输出到MongoDB数据库中,您需要首先创建一个MongoDB库,创建MongoDB数据库的信息由命令行传入的缓存配置文件中的MongoDB信息指定;同时会根据指定的缓存配置文件(sci)在同级目录下生成一个新的sci文件,只有的多进程切图都将使用这个新生成的sci缓存配置文件。
Windows系统下创建MongoDB库命令行(下载示例:MongodbBuilder.bat):
java -cp .:com.supermap.data.jar:com.supermap.mapping.jar:com.supermap.tilestorage.jar:com.supermap.data.processing.jar com.supermap.data.processing.cache. MongodbBuilder <参数1:缓存配置文件sci路径>
Linux系统下创建MongoDB库命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache. MongodbBuilder <参数1:缓存配置文件sci路径>
1.2.2 拆分任务
拆分任务是将上已步骤获得的缓存配置文件*.sci作为一个总的sci,然后,按照缓存配置文件中设置的切图比例尺的情况,拆分任务,获得多个子sci,用于后续多进程切图时分配到多个进程中去执行切图任务。
Windows系统下拆分任务的的命令行:
java -cp .:com.supermap.data.jar:com.supermap.mapping.jar:com.supermap.tilestorage.jar:com.supermap.data.processing.jar com.supermap.data.processing.cache.TaskBuilder <参数1:总sci路径> <参数2:拆分的子sci的存放根目录> <参数3(可选):拆分多少个allTask.list 文件>> <参数4(可选):是否生成udb,值可以为0、1、2三个值,0表示不生成udb,1表示生成udb同时重新拆分子sci,2表示生成udb但不重新拆分子sci;默认为0,不生成udb >
Linux系统下拆分任务的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.TaskBuilder <参数1:总sci路径> <参数2:拆分的子sci的存放根目录> <参数3(可选):拆分多少个allTask.list 文件>> <参数4(可选):是否生成udb,值可以为0、1、2三个值,0表示不生成udb,1表示生成udb同时重新拆分子sci,2表示生成udb但不重新拆分子sci;默认为0,不生成udb >
如下举例,windows操作系统下拆分任务命令::(下载示例:CacheBuilder.bat,其中包含了拆分任务内容)
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.TaskBuilder F:\Data\缓存配置文件.sci F:\Data\doing
说明:
1. 执行后,“拆分的子sci的存放根目录”下会生成一个task文件夹存放了所有拆分后的子sci,此外,还有一个allTask.list文件,该文件是拆分后的子sci文件名列表,供后续生成缓存用。
2. 执行后,“拆分的子sci的存放根目录”下会生成udb目录及目录下的cache.udb文件。
1.2.3 执行多进程切图
拆分任务完成了,就可以执行多进程切图了。
Windows系统下切图任务的的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder <参数1:工作空间路径> <参数2:地图名称> <参数3: allTask.list 文件路径/拆分的子sci的存放目录/单个sci文件路径(单进程)> <参数4: 缓存存放目录> <参数5: 新增进程数> <参数6:合并sci个数>
Linux系统下切图任务的命令行:
java -cp .:com.supermap.data.jar:com.supermap.mapping.jar:com.supermap.tilestorage.jar:com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder <参数1:工作空间路径> <参数2:地图名称> <参数3: allTask.list 文件路径/拆分的子sci的存放目录/单个sci文件路径(单进程)> <参数4: 缓存存放目录> <参数5: 新增进程数> <参数6:合并sci个数>
如下举例,windows操作系统下执行多进程切图命令(下载示例:CacheBuilder.bat):
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder D:\Data\workspace.smwu ChinaMap F:\Data\doing\task F:\ Data 4 50
说明:
1. <参数1:工作空间路径>:要切图的地图保存的工作空间。
2. <参数2:地图名称>:要切图的地图名称。
3. <参数3: allTask.list 文件路径/拆分的子sci的存放根目录/单个sci文件路径(单进程)> 即三种情况都可以,allTask.list是拆分的小sci名称列表,如果传入路径且用了双引号,则路径最后一个\不要加,因为\也是转义符号会将后半个冒号转义,从而导致参数传递有误。
4. <参数5:新增进程数>:是指除主线程外增加的多进程数。
5. <参数6:合并任务数>:是指多少个sci同时输入到一个进程里执行,即一次打开工作空间和地图后,将几个sci同时输入到一个进程里执行,因为如果每个sci都打开工作空间打开地图,性能会很慢。
6. 生成完成sci文件会移到“拆分的子sci的存放根目录”下的build文件夹下。
7. 切图完成后,需要手动将缓存配置文件*.sci拷贝到缓存生成目录,就可以加载sci文件浏览缓存地图了。
i注意
使用多进程切图时,要求数据源要设置为以只读方式打开,因为要多进程打开数据,所以必须要求数据源只读方式打开。
1.3 检查切图结果
检查缓存生成结果,主要是查看是否有缺少瓦片或者白块的情况。
Windows系统下结果检查的的命令行(下载示例:CacheCheck .bat):
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheCheck <参数1:缓存结果sci所在目录/mongo> <参数2: allTask.list 文件路径/拆分的子sci的存放目录> <参数3:新增进程数> <参数4:合并sci个数> <参数5(可选):true/false(错误信息是否保存到udb数据源)> <参数6(可选):范围检查文件路径(GeoJSON文件)>
Linux系统下结果检查的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheCheck <参数1:缓存结果sci所在目录/mongo> <参数2: allTask.list 文件路径/拆分的子sci的存放目录> <参数3:新增进程数> <参数4:合并sci个数> <参数5(可选):true/false(错误信息是否保存到udb数据源)> <参数6(可选):范围检查文件路径(GeoJSON文件)>
说明:
1. <参数1:缓存sci目录/mongo> 当是mongoDB缓存时,该参数可以输入任何一个字符串,如:mongo
2. 检查出问题的小sci文件,会存放到小sci目录同级的error目录下,成功的会在checked目录下,异常退出的会还在原目录下
3. <参数5(可选):true/false(错误信息是否保存到udb数据源)>。不加该参数时,默认是false;参数是true时,错误信息保存到步骤二(拆分总sci为多个子sci)中生成的cache.udb里。
如下图所示,如果选择了将错误信息保存到第二步生成的cache.udb里,那么数据源中将建立一些面数据集,每个数据集名称都是基于切图有问题的比例尺分母命名,其中记录了该比例尺下有问题的缓存瓦片的边界。
下图所示,cache.udb里数据属性表中记录了缓存瓦片发生错误的类型,每一条记录为一张瓦片的对应范围的面对象。其中,errortype记录了错误类型编码;errordesc为对应错误编码的描述信息,具体说明如下。
(1)missing:没有此瓦片数据。
(2)error:读取此瓦片数据错误。
(3)white:此瓦片为非纯色瓦片,但是全白图。
(4)lost:对于紧凑缓存,未找到紧凑缓存cf文件。
(5)failure:对于紧凑缓存,打开紧凑缓存cf文件失败。
4. <参数6(可选):范围检查文件路径(如GeoJSON文件)> 根据传入范围文件( GeoJSON文件)中所指定的范围来检查,不加该参数时默认是全部遍历。
5. check功能目前不支持原始缓存的check检查,目前只支持紧凑缓存和mongoDB缓存。
1.4 补切问题瓦片
检查缓存生成结构后,就可以对检查结果进行修补,如对缺少的瓦片或者白块瓦片进行补切。
Windows系统下补切缓存的的命令行(下载示例:CacheRecover.bat):
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder <参数1:工作空间路径> <参数2:地图名称> <参数3: 上一步检查存在问题的error目录> <参数4: 补切缓存存放目录> <参数5: 新增进程数> <参数6:合并sci个数>
Linux系统下补切缓存的命令行:
java -cp .;com.supermap.data.jar;com.supermap.mapping.jar;com.supermap.tilestorage.jar;com.supermap.data.processing.jar com.supermap.data.processing.cache.CacheBuilder <参数1:工作空间路径> <参数2:地图名称> <参数3: 上一步检查存在问题的error目录> <参数4: 补切缓存存放目录> <参数5: 新增进程数> <参数6:合并sci个数>
说明:
<参数4:补切缓存存放目录> 补切缓存的存放目录最好不要用原来的缓存目录。
- 使用iObjects java进行多进程生成缓存
- java后台数据库同步使用map进行缓存
- 使用SqlDependency进行缓存
- 使用redis进行缓存
- SuperMap iObjects Java在Tomact中的应用
- SuperMap iObjects Java 8C 产品入门
- SuperMap iObjects Java tar 包使用指南
- java中使用ehcache对jdbc查询数据进行缓存
- 使用mulitiprocessing 进行多进程非阻塞
- 使用Python进行多进程编程
- 使用siege进行多进程压力测试
- 使用Python进行多进程编程
- 使用Python进行多进程编程
- 使用Python进行多进程编程
- 使用Python进行多进程编程
- 如鹏java学习进程 使用数组进行图片布局
- 使用memcached进行内存缓存
- 使用memcached进行内存缓存
- Listener监听器
- 人生感悟随笔
- resful API
- 数据库语言(DDL和DML)
- Codeforces 580A
- 使用iObjects java进行多进程生成缓存
- UI 自动化高亮元素与截图小工具
- 关于servlet的@WebServlet注解。
- 11
- Git 提交项目代码
- 如何用anaconda安装cv2(python—opencv)
- 10分钟了解产品运营到底是什么
- 12
- Mysql批量导入数据慢