GWC SQLite插件

此插件提供与基于GWC SQLite的Blob存储区的集成。目前只有一个这种类型的blob存储区可用,即mbtiles blob存储区。

mbtiles blob存储区

这个blob存储允许我们使用 MBTiles 规范(版本1.1),该规范定义了在 SQLite 数据库,但对瓦片格式和投影有一些限制。

mbtiles规范仅支持jpeg和png格式,并假定投影epsg:3857。实现的blob存储区将读取和写入符合规范的mbtiles文件,但也将能够写入和读取使用其他格式和投影的mbtiles文件。

使用mbtiles blob存储区会带来一些好处,但会损失一些性能。mbtiles存储使用的文件数量非常少,这使得数据处理更容易(例如备份、在环境之间移动数据块)。在某些情况下,存储的数据会更紧凑,从而减小磁盘上数据的大小。

与文件blob存储区相比,此存储区有两个限制:

  • 此存储不与磁盘配额集成,这是使用数据库文件的结果。

  • 无法在多个GeoWebCache实例之间共享此存储。

备注

如果激活磁盘配额,则存储的统计信息将没有多大意义,也不会反映实际磁盘使用情况,因此无法真正控制数据库文件的大小。

数据库文件不能作为简单文件管理。打开与数据库的连接时,不应删除、移动或切换关联的文件,否则数据库文件可能已损坏。在删除大量数据或频繁插入、更新或删除操作后,数据库文件也可能变得支离破碎。

文件路径模板

mbtiles文件将对应于sqlite数据库文件。为了限制每个数据库文件上的争用量,将允许用户决定数据库文件的粒度。当geoWebcache需要将图块映射到数据库文件时,它只查看数据库文件路径,而不考虑mbtiles元数据(这就是为什么此存储能够处理其他格式和投影)。

要配置数据库文件粒度,用户需要提供文件路径模板。mbtiles blob存储区的默认文件路径模板是:

{layer}/{grid}{format}{params}/{z}-{x}-{y}.sqlite

此文件模板将属于某一层的所有图块存储在单个文件夹中,该文件夹将包含每个给定格式、投影和参数集的子文件夹,并将具有相同缩放级别、列范围和行范围的图块分组到一个sqlite文件中。列和行范围值通过配置传递,默认情况下,这些值等于250。提供的文件路径模板将始终被视为相对于作为配置选项提供的根目录。

下面是使用默认路径模板时blob存储区根目录结构的示例:

.
|-- nurc_Pk50095
|   `-- EPSG_4326image_pngnull
|       |-- 11_2000_1500.sqlite
|       `-- 12_4250_3000.sqlite
`-- topp_states
    |-- EPSG_900913image_jpeg7510004a12f49fdd49a2ba366e9c4594be7e4358
    |   |-- 6_250_500.sqlite
    |   `-- 7_0_0.sqlite
    `-- EPSG_900913image_jpegnull
        |-- 3_500_0.sqlite
        |-- 4_0_250.sqlite
        `-- 8_750_500.sqlite

如果没有提供参数 null 将使用字符串。是用户定义避免冲突的文件路径模板的责任。

可在文件路径模板中使用的术语有:

  • grid :网格集id

  • 图层 :层的名称

  • 格式 :瓦片的图像格式

  • 帕拉姆 :参数唯一哈希

  • x :列范围,基于列范围计数配置属性计算

  • y :行范围,基于行范围计数配置属性计算

  • z :缩放级别

也可以使用参数值,如 风格 例如。如果参数不存在 null 将被使用。

备注

文字 \ and / can be used as path separator, they will be translated to the operating system specific one (`` ``对于Linux和 / for Windows). Any special char like \, /, `` :``或将用下划线替换术语值中使用的空格。

mbtiles元数据

有效的mbtiles文件需要一些元数据,创建mbtiles文件时将自动添加图像格式和图层名。用户可以使用属性文件提供剩余的元数据,该文件的名称必须遵循以下模式:

<layerName>.metadata

例如,添加元数据 descriptionattribution 图层条目 tiger_roads 名为 tiger_roads.properties 元数据目录中应包含以下内容:

description=ny_roads
attribution=geoserver

包含此元数据文件的目录由配置属性定义。

过期规则

mbtiles规范不提供有关何时创建tile的信息。为了允许过期规则,使用一个辅助表来存储磁贴创建时间。当存在由第三方工具生成的mbtiles文件时,假设tile的创建时间是第一次访问它。此功能可以通过配置激活或停用。请注意,这不会破坏mbtiles规范的符合性。

热切的截断

执行缓存截断时,存储将尝试删除整个数据库文件,避免创建碎片空间。这并不适用于所有情况,并且高度依赖于数据库文件的粒度。配置属性 eagerDelete 允许用户禁用或停用默认禁用的此功能。

当接收到按区块范围截断请求时,标识包含属于该区块范围的区块的所有数据库文件。如果急切删除设置为TRUE,则删除这些数据库文件,否则将对每个文件执行一次删除查询。

配置示例

以下是mbtiles存储区的默认配置示例:

../../_images/mbtilesBlobStore.png

这个 根目录 属性定义创建此存储生成的所有文件的位置。这个 模板路径 属性用于控制数据库文件的粒度(请参阅上面的一节)。属性 行范围计数列范围计数 将由路径模板用于计算瓦片范围。

这个 池大小 属性允许控制打开的数据库文件的最大数目,在定义此属性时,用户应考虑操作系统允许的打开文件的数目。这个 池清除间隔值 属性控制检查池大小的频率,以查看是否需要关闭某些数据库文件连接。

财产 急删除 控制如何执行截断操作(请参阅上面的部分)。财产 使用创建时间 可用于激活或取消激活瓦片创建时间的插入(请参阅上面的部分)。财产 执行并发 控制用于执行某些操作的并行性,例如truncate操作。财产 mbtilemetadatadirectory目录 定义存储将在其中查找用户提供的mbtiles元数据的目录。

备注

由于连接池逐出发生在某个时间间隔,这意味着并发打开的文件数在一定时间内可以超过阈值限制。

替换操作

如前所述,如果缓存运行的是sqlite文件,那么首先需要关闭所有连接。已为此建议创建替换操作。替换操作将首先将新文件并排复制到旧文件,然后阻止对旧文件的请求,关闭与旧文件的连接,删除旧文件,将新文件重命名为当前文件,重新打开新的DB文件并重新开始服务请求。几乎是瞬间的。

此操作的一个REST入口点可用,可以随同请求提交一个zip文件或单个文件。替换操作还可以使用已经存在的文件或目录。当使用目录时,目录结构将用于查找每个文件的目标,所有路径将被假定为相对于存储根目录。这意味着通过压缩第二个存储根目录并将其作为替换项发送,可以用另一个存储内容(例如填瓦存储内容)替换存储内容。

备注

使用本地目录或提交zip文件时,将考虑目录中的所有文件。

调用此操作有四种方法。下面是使用curl调用所有这些变量的示例。

替换单个文件上载替换文件:

curl -u admin:geoserver -H 'Content-Type: multipart/form-data'
  -F "file=@tiles_0_0.sqlite"
  -F "destination=EPSG_4326/sf_restricted/image_png/null/10/tiles_0_0.sqlite"
  -F "layer=sf:restricted"
  -XPOST 'http://localhost:8080/geoserver/gwc/rest/sqlite/replace'

使用系统上已存在的文件替换单个文件:

curl -u admin:geoserver -H 'Content-Type: multipart/form-data'
  -F "source=/tmp/tiles_0_0.sqlite"
  -F "destination=EPSG_4326/sf_restricted/image_png/null/10/tiles_0_0.sqlite"
  -F "layer=sf:restricted"
  -XPOST 'http://localhost:8080/geoserver/gwc/rest/sqlite/replace'

替换多个文件上载zip文件:

curl -u admin:geoserver -H 'Content-Type: multipart/form-data'
  -F "file=@tiles.zip"
  -F "layer=sf:restricted"
  -XPOST 'http://localhost:8080/geoserver/gwc/rest/sqlite/replace'

使用系统上已存在的目录替换多个文件:

curl -u admin:geoserver -H 'Content-Type: multipart/form-data'
  -F "source=/tmp/tiles"
  -F "layer=sf:restricted"
  -XPOST 'http://localhost:8080/geoserver/gwc/rest/sqlite/replace'

这个 图层 参数标识应替换其关联blob存储内容的层。这个 file 参数用于上载单个文件或ZIP文件。这个 来源 参数用于引用已存在的文件或目录。这个 目的地 参数用于定义应替换为所提供文件的文件。

这是此参数的唯一有效组合其他组合将忽略某些提供的参数或引发异常。