# 矢量、栅格大数据HA解决方案

# 目标

  • 海量矢量数据存储
  • 海量矢量数据分析(分析需要保证实时性)
  • 海量矢量数据可视化
  • 保证三高(高可用、高性能、高可拓)

# 解决方案

# 海量数据查询可视化

# 系统技术流程

image-20210104090239524

# 方案一

  • PostgreSQL+PostGIS (矢量数据存储+空间分析)
  • GeoServer (栅格数据存储,特定样式矢量图层)
  • Redis (缓存)
  • SpringBoot (后台服务)
  • OpenLayers(前端可视化)
# 条件查询

查询的过程中根据相关层级进行对应的数据抽稀操作

image-20210104100821457

  1. 前端视图范围切片,将可视范围分成不同区域进行请求处理

wps1

  1. 前端视图切片内选取geoHash块,根据视图内geoHash值进行空间检索。

image-20210104102915105

  1. 根据geoHash检索后添加属性条件,得到最终检索内容。

image-20210104102932468

# 范围查询

查询的过程中根据相关层级进行对应的数据抽稀操作

image-20210104100850921

# 方案二

  • PostgreSQL+ GeoTools(基于GeoHash索引)
  • 由后台进行空间分析
  • GeoServer (栅格数据存储,特定样式矢量图层)
  • Redis (缓存)
  • SpringBoot (后台服务)
  • OpenLayers(前端可视化)

image-20210104103215597

  1. 前端视图范围切片,将可视范围分成不同区域进行请求处理

image-20210104103232142

  1. 在与多边形相交视图内选择与多边形相交和包含的geoHash块

image-20210104103255275

  1. 取包含geoHash块内点,对相交geoHash块内的点进行判断,当点在多边形和视图范围内时选择该点。

image-20210104103337011

# PostgreSQL集群

在每个协调节点和数据节点上安装PostGIS,以提供空间分析能力

集群的底层使用的是PostgreSQL的流复制功能,延迟很低,主要受网络影响

Postgres-XL 是一个完全满足ACID的、开源的、可方便进行水平扩展的、多租户安全的、基于PostgreSQL的数据库解决方案。

Postgres-XL 可非常灵活的应付各种负载,比如:

  • OLAP(通过MPP并行化)
  • OLTP
  • OLAP & OLTP
  • 操作数据存储
  • Key-value存储,包括JSON格式

image-20201230093330575

# GeoServer集群

GeoServer实施行业标准的OGC协议,例如Web功能服务(WFS),Web地图服务(WMS)和Web Coverage服务(WCS)。其他格式和发布选项可作为扩展使用,包括Web处理服务(WPS)和Web地图图块服(WMTS)。

image-20201230094342272

# Redis集群

介绍

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

解决问题

存储热点数据,切片查询进行缓存

redis是内存数据库,单机故障容易造成数据丢失的情况

解决单机故障:

  1. 根据实际情况配置对应的持久化策略
  2. 使用哨兵模式的集群,在主节点宕机时重新选举出新的Master

image-20201230095934693

# SpringBoot微服务

可基于微服务架构,对高负载功能进行拆分并动态扩容

微服务是一种用于构建应用的架构方案。微服务架构有别于更为传统的单体式方案,可将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。

# 系统架构

image-20201230102504252

# 测试比对

集群环境:

Postgres-XL

1主2从 (服务器配置 1核2G +2个 1核4G)

抽样的精度(千分之一) 10万条

-- 精度4 5秒以上  精度2 2分钟
select st_asgeojson(geom) as geojson, st_astext(geom) as mkt
from "distributed_random_points"
where geohash like 'ww4y%'
ORDER BY random()
LIMIT 100;

-- 抽样百分之一  2秒左右
select st_asgeojson(geom) as geojson, st_astext(geom) as mkt
from "distributed_random_points" TABLESAMPLE system(1)
where geohash like 'wt%'
ORDER BY random()
LIMIT 100;

-- 抽样千分之一  200~300ms左右
select st_asgeojson(geom) as geojson, st_astext(geom) as mkt
from "distributed_random_points" TABLESAMPLE system(0.1)
where geohash like 'wt%'
ORDER BY random()
LIMIT 100;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上次更新时间: 2024年2月14日星期三上午10点24分