作者:张永利

一、 使用背景

针对传统单机切缓存技术的耗时长、无故障恢复机制等缺点, SuperMap iServer 提供了支持多台机器并行切图的分布式切图服务,可添加位于不同机器的多个切图节点,从而实现并行切图,提升切图工作的效率。
除了这种直接配置使用外,还支持不同途径的对外分发。

二、 软件要求

操作系统

MongoDB 服务端可运行在 Linux、 Windows 或 Mac OS X 平台,支持 32 位和 64 位系
统,默认端口为 27017。 MongoDB 把数据存储在文件中( Linux 默认路径为/data/db,
Windows 默认路径 C:\data\db),为提高效率使用内存映射文件进行管理。

软件版本

MongoDB 的版本要求 2.1 及以上。

三、 Windows MongoDB 存储切片的拷贝分发

MongoDB 中存储的瓦片数据支持直接进行拷贝分发,即可以将数据从一个 MongoDB服务器拷贝到另一个 MongoDB 服务器。但是,为避免在拷贝过程中,有其他数据写入写出 mongodb 服务,导致拷贝不完整, 建议在拷贝数据前,关闭所有 MongoDB 服务。

方法一:直接拷贝 data 文件夹

例如,有 server1 和 server2 两个 MongoDB 服务器,数据存储目录( dbpath)都是根目录下的 data 文件夹。数据拷贝时,只需把 server1 的 data 目录下的所有内容拷到了 server2 的 data 目录下,重启 server2 服务即可。

如下所示:将 server1 下 date 文件夹直接拷贝到 server2 中

刷新mongodb缓存 mongodb 缓存_iserver


然后在 cmd 命令行中 cd 切换到 MongoDB server2 的 bin 目录下,使用和当初 server1

启动时相同的方式启动 server2,如:

mongod.exe –dbpath D:\mongodb2\data\db –port 27010

最后再启动 iServer, 使用程序调用验证。

注意:当迁移到其他机器上,如端口号和IP 变更后,需要变更iSevrer分布式切片库

刷新mongodb缓存 mongodb 缓存_supermap_02


注意:当迁移到其他机器上,如端口号和 IP 变更后,需要变更 iSevrer 分布式切片库

方法二:使用导出/导入命令

  1. 启动 server1 服务(端口为 27010)
    mongod.exe -dbpath D:\mongodb\data\db -port 27010
  2. 再开启一个 cmd 窗口,cd 切换到 server1 的 bin 目录, 将 server1 中 smtiles 数据库的
    数据导出为 BSON 文件, 使用命令:
    mongodump.exe -host localhost -port 27010 -d smtiles -o D:\output
    其中:
    “ -d” 指定数据库名称
    iserver 分布式切图的默认数据库名为 smtiles
    “ -o” 指定导出目录。
  3. 刷新mongodb缓存 mongodb 缓存_supermap_03

  4. 查看导出文件:
  5. 刷新mongodb缓存 mongodb 缓存_切图_04

  6. 将得到的数据文件拷贝到 server2 能够访问的位置或有权限的位置
  7. 启动 server2 服务(端口为 27015)
    mongod.exe -dbpath D:\mongodb2\data\db -port 27015
  8. 将上述 smtiles 数据库对应的 BSON 文件导入 server2 中
    mongorestore.exe -host localhost -port 27015 -d smtiles D:\output\smtiles
    其中, “ -d” 指定数据库名称和存储文件的位置。
  9. 刷新mongodb缓存 mongodb 缓存_刷新mongodb缓存_05

  10. 注意: 这里所演示启动 server2 服务(端口为 27015)那么需要在 iServer 里面配置端口号为 27015 的分布式切片库, 这里省略, 具体方法可以参考方法一。

说明

MongoDB 的数据文件都存储在{dbpath}/data 目录下,由于 MongoDB 自身格式的特点,数据文件占用磁盘空间较大。但 iServer 切图瓦片实际占用的大小只有 data 目录的 1/4左右,采用方法二进行切片数据的分发时可比第一种方法节约空间一半以上,因此推荐使用第二种方法进行分发。

四、 常见问题解答:

启动 MongoDB 失败, 报错

刷新mongodb缓存 mongodb 缓存_mongodb_06


答: 是由于找不到启动数据库的路径,为其创建相应文件夹即可。

(上图错误时找不到 data\db 路径,解决办法是在 mongodb2 文件夹下创建 data 文件夹,然后进入

data 文件夹,在 data 文件夹中再创建 db 文件夹)