5. 架构概述¶
GeoMesa支持多种可扩展的基于云的数据存储技术,包括用于流数据的ApacheAcumulo、ApacheHBase和ApacheKafka。GeoMesa环境还可以利用ApacheSpark对存储数据和流数据进行大规模分析。

5.1. GeoMesa和Geoserver¶
GeoMesa的Geoserver插件允许Geoserver处理使用GeoMesa表存储的数据。该插件将与数据源相关联的Geoserver功能映射到GeoMesa格式表,并提供了许多优化以支持特定的用例。
如果应用程序已经在使用Geoserver,那么与GeoMesa的集成只需向Geoserver添加新的数据存储并更新应用程序的配置即可。

5.2. 与GeoMesa集成¶
GeoMesa工具 GeoTools 提供对以下开放地理空间联盟标准的编程访问和HTTP访问的接口:
可以使用多个框架来流传输和批量摄取数据。这些工具包括GeoMesa命令行工具、使用ApacheHadoop的Map-Reduced作业,以及在ApacheStorm上运行的实时拓扑。下图显示了一种可能的接收体系结构:

下面显示了一种可能的查询体系结构,在该体系结构中,GeoTools和GeoMesa API协调外部查询客户端的累积迭代器的使用:

5.3. 关键值存储和Z曲线¶
GeoMesa用于长期存储的数据存储是键值数据库,这是一种NoSQL数据库,其中每条记录都使用该记录的唯一标识符来存储和检索,该记录称为键。Acumulo和HBase对这些关键字进行排序,并可以跨任意数量的节点(服务器)存储它们。
在使用键值数据库时,良好的键设计本身可以带来更高效的应用程序。与关系数据库中的键通常是连续整数不同,键值存储通常使用键来表示频繁查询数据的功能。例如,假设客户订单数据库按订单编号编制索引。然后,当客户按订单号查询时,数据库直接转到该键并返回该订单的记录。
这是对Acumulo和HBase键结构实际工作方式的简化,但可以从键和值的角度解释GeoMesa的基本原理。要存储时空数据,我们需要创建一个表示记录的时间/空间位置的键。GeoMesa使用此系统将位置存储为沿一条特殊线访问地图所有地段的点,如下图所示的红线:

这条红线被称为空间填充曲线,或者更确切地说,是Z曲线。这行只访问每个单元格一次,从而建立了单元格的唯一顺序。
空间填充曲线也可以使用更高分辨率的贴图,如下图所示:

这条曲线上的每个点都可以被分配一个连续的值,让GeoMesa将可能是纬度-经度对的东西表示为单个整数。这对于在一维键中表示二维数据非常有用,键值数据存储就是这种情况。更重要的是,这些空间填充曲线可以调整为 n 尺寸,让GeoMesa线性化 n 单个维度中的数据维度。
5.4. GeoMesa索引键¶
GeoMesa指数的基本原理是用一条三维空间填充曲线来表示经度、纬度和时间三个维度,并以该曲线上的点的值为关键。这使它可以将记录存储在键值存储中,并使用一个键来表示我们最常用于查询的三个数据维度。
实际的密钥结构比简单的密钥-值对复杂得多。以下是GeoMesa索引键的更详细表示:

注意Key部分中的Z3编码和 Simple Feature (空间记录)。此密钥的结构可以根据数据进行调整,但这是默认设置。