GeoMesa Redis 快速入门

GeoMesa Redis 是 ‌GeoMesa‌ 与 ‌Redis‌ 结合的一种技术方案,主要用于处理地理空间数据的实时存储、索引和查询。GeoMesa 是一个开源的分布式时空数据库,支持在多种分布式存储系统(如 HBase、Accumulo、Cassandra 等)上构建高效的地理空间数据索引,而 Redis 作为一个高性能的内存数据库,具有快速读写、支持复杂数据结构(如哈希、列表、集合等)的特点。将两者结合,可以充分利用 Redis 的高性能和 GeoMesa 的地理空间处理能力,适用于需要实时处理地理空间数据的场景。


GeoMesa Redis 的核心特点

  1. 高性能实时处理
    Redis 的内存存储和快速读写能力使其非常适合处理高频的地理空间数据更新和查询。例如,在实时交通监控、物联网设备位置跟踪等场景中,GeoMesa Redis 可以快速响应并返回结果。

  2. 地理空间数据支持
    GeoMesa 提供了对地理空间数据(如点、线、面)的索引和查询能力,支持常见的空间操作(如范围查询、最近邻查询等)。通过 Redis 的扩展性,可以轻松处理大规模的地理空间数据。

  3. 灵活的数据模型
    Redis 支持多种数据结构(如哈希、有序集合、地理空间索引等),GeoMesa Redis 可以利用这些特性构建更灵活的数据模型。例如,可以使用 Redis 的 ‌GEO‌ 命令集(GEOADD、GEORADIUS 等)来直接存储和查询地理空间数据。

  4. 分布式架构
    GeoMesa 本身支持分布式存储和计算,结合 Redis 的集群模式,可以构建高可用的地理空间数据处理系统,适用于大规模分布式环境。


典型应用场景

  1. 实时位置跟踪
    在物流、共享出行、无人机监控等场景中,实时跟踪设备或车辆的位置,并基于地理位置进行查询(如“查找距离某点 1 公里内的所有车辆”)。

  2. 地理围栏(Geofencing)
    当设备进入或离开某个地理区域时触发警报,例如安全监控、广告推送等。

  3. 实时交通监控
    基于实时交通数据(如车辆位置、速度等)进行拥堵分析、路径规划等。

  4. 物联网(IoT)设备管理
    管理大量地理空间分布的 IoT 设备,实时查询设备状态和位置。


技术实现方式

  1. 使用 Redis 的 GEO 命令集
    Redis 从 3.2 版本开始支持地理空间索引(GEO 命令集),可以直接存储地理坐标(经纬度)并支持范围查询。GeoMesa Redis 可以基于这些命令构建高效的地理空间索引。

  2. 结合 GeoMesa 的索引机制
    对于更复杂的地理空间查询(如多边形查询、时间序列查询等),可以结合 GeoMesa 的索引机制(如 Z2/Z3 索引)在 Redis 中实现。

  3. 混合存储架构
    将 Redis 作为缓存层,存储热点地理空间数据,而将历史数据存储在 HBase 或其他持久化存储中,以平衡性能和成本。


优势与挑战

优势‌:

  • 高性能‌:Redis 的内存存储和快速读写能力使其非常适合实时场景。
  • 灵活性‌:支持多种数据结构,可以灵活构建数据模型。
  • 扩展性‌:Redis 集群和 GeoMesa 的分布式特性使其适用于大规模数据。

挑战‌:

  • 数据持久化‌:Redis 是内存数据库,数据持久化需要额外配置(如 AOF 或 RDB),可能增加复杂度。
  • 数据规模限制‌:Redis 的内存消耗较高,对于超大规模地理空间数据,可能需要结合其他存储系统。
  • 功能限制‌:Redis 的 GEO 命令集功能相对有限,对于复杂地理空间查询可能需要结合 GeoMesa 的其他索引机制。

总结

GeoMesa Redis 是一种将 Redis 的高性能与 GeoMesa 的地理空间处理能力结合的技术方案,适用于需要实时处理地理空间数据的场景。通过合理设计数据模型和索引机制,可以充分发挥两者的优势,构建高效、灵活的地理空间数据处理系统。然而,在实际应用中,需要根据数据规模、查询复杂度和持久化需求等因素进行权衡和优化。

概要

  1. 建立新的(静态)SimpleFeatureType

  2. 准备 Redis 来存储此类数据

  3. 创建几千个示例 SimpleFeatures

  4. 将这些 SimpleFeatures 写入 Redis

  5. 对给定地理矩形、时间范围和属性的查询 filter, 写出结果集中的条目

  6. 使用 GeoServer 可视化数据(可选)

先决条件

在开始之前,您必须安装并配置以下内容:

  • JDK 1.8 版本

  • Apache Maven 3.6.3 或更高版本

  • 一个 GitHub 客户端

  • 一个 Redis 实例

如果您没有现有的 Redis 实例,可以从 Windows 轻松下载一个 Downloads - Redis

下载并构建教程

在您的机器上选择一个合理的目录,然后运行:

$ git clone https://github.com/geomesa/geomesa-tutorials.git
$ cd geomesa-tutorials

请确保下载或签出与 您的 GeoMesa 版本。

为了便于使用,该项目构建了一个捆绑的工件,其中包含所有必需的 dependencies 的 jar 中。要构建,请运行:

$ mvn clean install -pl geomesa-tutorials-redis/geomesa-tutorials-redis-quickstart -am

运行教程

在命令行中,运行:

$ java -cp geomesa-tutorials-redis/geomesa-tutorials-redis-quickstart/target/geomesa-tutorials-redis-quickstart-$VERSION.jar \
    org.geomesa.example.redis.RedisQuickStart \
    --redis.url <url> --redis.catalog <catalog>

其中,您提供以下参数:

  • <url>Redis 连接 URL。如果您已部署 Redis 的本地实例,这通常 是localhost

  • <catalog>Redis 目录。例如,这应该是 Redis 实例中的唯一键geomesa

(可选)您还可以指定 Quick Start 应在完成后删除其数据。在运行时使用 标志 以启用此行为。--cleanup

运行后,您应该会看到以下输出:

Loading datastore

Creating schema: GLOBALEVENTID:String,Actor1Name:String,Actor1CountryCode:String,Actor2Name:String,Actor2CountryCode:String,EventCode:String,NumMentions:Integer,NumSources:Integer,NumArticles:Integer,ActionGeo_Type:Integer,ActionGeo_FullName:String,ActionGeo_CountryCode:String,dtg:Date,geom:Point:srid=4326

Generating test data

Writing test data
Wrote 2356 features

Running test queries
Running query BBOX(geom, -120.0,30.0,-75.0,55.0) AND dtg DURING 2024-12-31T00:00:00+00:00/2025-01-02T00:00:00+00:00
01 719027236=719027236|UNITED STATES|USA|INDUSTRY||012|1|1|1|3|Central Valley, California, United States|US|2025-01-01T00:00:00.000Z|POINT (-119.682 34.0186)
02 719027005=719027005|UNITED STATES|USA|||172|2|2|2|3|Long Beach, California, United States|US|2025-01-01T00:00:00.000Z|POINT (-118.189 33.767)
03 719026204=719026204|JUDGE||||0214|6|1|6|3|Los Angeles, California, United States|US|2025-01-01T00:00:00.000Z|POINT (-118.244 34.0522)
04 719025745=719025745|KING||||051|4|2|4|2|California, United States|US|2025-01-01T00:00:00.000Z|POINT (-119.746 36.17)
05 719026858=719026858|UNITED STATES|USA|||010|20|2|20|2|California, United States|US|2025-01-01T00:00:00.000Z|POINT (-119.746 36.17)
06 719026964=719026964|UNITED STATES|USA|||081|2|2|2|2|California, United States|US|2025-01-01T00:00:00.000Z|POINT (-119.746 36.17)
07 719026965=719026965|CALIFORNIA|USA|||081|8|1|8|2|California, United States|US|2025-01-01T00:00:00.000Z|POINT (-119.746 36.17)
08 719025635=719025635|PARIS|FRA|||010|2|1|2|3|Las Vegas, Nevada, United States|US|2025-01-01T00:00:00.000Z|POINT (-115.137 36.175)
09 719026918=719026918|UNITED STATES|USA|||042|20|5|20|3|Las Vegas, Nevada, United States|US|2025-01-01T00:00:00.000Z|POINT (-115.137 36.175)
10 719027141=719027141|ALABAMA|USA|JUDGE||172|8|1|8|2|Nevada, United States|US|2025-01-01T00:00:00.000Z|POINT (-117.122 38.4199)

Returned 669 total features

Running query BBOX(geom, -120.0,30.0,-75.0,55.0) AND dtg DURING 2024-12-31T00:00:00+00:00/2025-01-02T00:00:00+00:00
Returning attributes [GLOBALEVENTID, dtg, geom]
01 719027208=719027208|2025-01-01T00:00:00.000Z|POINT (-89.6812 32.7673)
02 719026313=719026313|2025-01-01T00:00:00.000Z|POINT (-84.388 33.749)
03 719026419=719026419|2025-01-01T00:00:00.000Z|POINT (-84.388 33.749)
04 719026316=719026316|2025-01-01T00:00:00.000Z|POINT (-83.6487 32.9866)
05 719027132=719027132|2025-01-01T00:00:00.000Z|POINT (-81.2793 33.4968)
06 719026819=719026819|2025-01-01T00:00:00.000Z|POINT (-81.9296 33.7896)
07 719026952=719026952|2025-01-01T00:00:00.000Z|POINT (-81.9296 33.7896)
08 719026881=719026881|2025-01-01T00:00:00.000Z|POINT (-82.0193 34.146)
09 719026909=719026909|2025-01-01T00:00:00.000Z|POINT (-82.0193 34.146)
10 719026951=719026951|2025-01-01T00:00:00.000Z|POINT (-82.0193 34.146)

Returned 669 total features

Running query EventCode = '051'
01 719024909=719024909|||MELBOURNE|AUS|051|10|1|10|4|Melbourne, Victoria, Australia|AS|2025-01-01T00:00:00.000Z|POINT (144.967 -37.8167)
02 719025178=719025178|AUSTRALIA|AUS|COMMUNITY||051|20|2|20|4|Sydney, New South Wales, Australia|AS|2025-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
03 719025965=719025965|MIDWIFE||||051|10|1|10|4|Sydney, New South Wales, Australia|AS|2025-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
04 719025509=719025509|COMMUNITY||AUSTRALIA|AUS|051|2|1|2|1|Australia|AS|2025-01-01T00:00:00.000Z|POINT (135 -25)
05 719025742=719025742|KING||||051|22|3|22|3|San Diego, California, United States|US|2025-01-01T00:00:00.000Z|POINT (-117.157 32.7153)
06 719025745=719025745|KING||||051|4|2|4|2|California, United States|US|2025-01-01T00:00:00.000Z|POINT (-119.746 36.17)
07 719025743=719025743|AUTHORITIES||||051|60|12|60|3|Wichita, Kansas, United States|US|2025-01-01T00:00:00.000Z|POINT (-97.3375 37.6922)
08 719027205=719027205|UNITED STATES|USA|SIOUX||051|4|1|4|3|Sioux City, Iowa, United States|US|2025-01-01T00:00:00.000Z|POINT (-96.4003 42.5)
09 719025111=719025111|||UNITED STATES|USA|051|2|1|2|3|Pickens County, South Carolina, United States|US|2025-01-01T00:00:00.000Z|POINT (-82.7165 34.9168)
10 719026938=719026938|PITTSBURGH|USA|||051|5|1|5|3|York County, Pennsylvania, United States|US|2025-01-01T00:00:00.000Z|POINT (-77 40.1254)

Returned 138 total features

Running query EventCode = '051' AND dtg DURING 2024-12-31T00:00:00+00:00/2025-01-02T00:00:00+00:00
Returning attributes [GLOBALEVENTID, dtg, geom]
01 719024909=719024909|2025-01-01T00:00:00.000Z|POINT (144.967 -37.8167)
02 719025178=719025178|2025-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
03 719025965=719025965|2025-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
04 719025509=719025509|2025-01-01T00:00:00.000Z|POINT (135 -25)
05 719025742=719025742|2025-01-01T00:00:00.000Z|POINT (-117.157 32.7153)
06 719025745=719025745|2025-01-01T00:00:00.000Z|POINT (-119.746 36.17)
07 719025743=719025743|2025-01-01T00:00:00.000Z|POINT (-97.3375 37.6922)
08 719027205=719027205|2025-01-01T00:00:00.000Z|POINT (-96.4003 42.5)
09 719025111=719025111|2025-01-01T00:00:00.000Z|POINT (-82.7165 34.9168)
10 719026938=719026938|2025-01-01T00:00:00.000Z|POINT (-77 40.1254)

Returned 138 total features

Cleaning up test data
Done

查看代码

本教程应提供源代码。main logic 包含在 模块中的泛型 这与数据存储无关。一些相关方法是:org.geomesa.example.quickstart.GeoMesaQuickStartgeomesa-tutorials-common

  • createDataStore从 Input 配置中获取 Datastore 实例

  • createSchema在 Datastore 中创建架构,作为写入数据的先决条件

  • writeFeatures使用 a 将功能写入数据存储FeatureWriter

  • queryFeatures对数据存储运行多个查询

  • cleanup删除示例数据并释放 Datastore 实例

本快速入门使用一小部分 GDELT 数据。将数据解析为 GeoTools SimpleFeatures 的代码为 包含在 :org.geomesa.example.data.GDELTData

  • getSimpleFeatureType创建表示数据SimpleFeatureType

  • getTestData解析嵌入的 TSV 文件以创建对象SimpleFeature

  • getTestQueries说明了使用 CQL(GeoTools 的上下文查询语言)的几种不同的查询类型

可视化数据(可选)

有两个选项可以直观地显示此 Quick Start 提取的数据。最简单的选择是使用 GeoMesa Redis 工具发行版的命令。有关更可用于生产的示例,请 也可以建立一个 GeoServer 并将其连接到您的 Redis 实例。export

使用 Leaflet 可视化数据

要成功运行此命令,您必须有一台连接到 Internet 的计算机 以访问外部 Leaflet 资源。

该命令是 GeoMesa Redis 命令行工具的一部分。要使用命令, 确保您已按照设置 Redis 命令行工具中所述安装了命令行工具。 该命令提供了将要素导出到 Leaflet 地图的格式 ,您可以在 Web 浏览器中打开。要生成地图,请从 GeoMesa 运行以下命令 Redis 工具分发目录:exportexportleaflet

bin/geomesa-redis export            \
    --url <url>                     \
    --catalog <table>               \
    --feature-name gdelt-quickstart \
    --output-format leaflet

其中连接参数与您在上面快速入门中使用的参数相同。只需查看地图 在 Web 浏览器中打开命令提供的 URL。如果您单击 map 中,您可以启用和禁用 Heatmap (热图) 和 Feature (要素) 图层,以及提供的两个 Base Layer。

Visualizing quick-start data with Leaflet

使用 Leaflet 可视化快速入门数据

使用 GeoServer 可视化数据

您可以使用 GeoServer 来访问和可视化存储在 GeoMesa 中的数据。为了使用 GeoServer, 下载并安装版本 2.27.1。然后按照 在 GeoServer 中安装 GeoMesa Redis 中的说明启用 GeoMesa。

向 GeoServer 注册 GeoMesa Store

使用您的用户和密码凭据登录 GeoServer。点击 “商店”和“添加新商店”。选择矢量数据 source 并填写所需的参数。Redis (GeoMesa)

基本店铺信息:

  • workspace这取决于您的 GeoServer 安装

  • data source name选择一个合理的名称,例如geomesa_quick_start

  • description这完全是装饰性的;GeoMesa quick start

连接参数:

  • 这些参数值与您在 命令行;它们描述了如何连接 到数据所在的 Redis 实例

点击“保存”,GeoServer 将在您的 Redis 实例中搜索任何 GeoMesa 管理的要素类型。

发布图层

GeoServer 应该识别特征类型,并且 应将其显示为可发布的图层。单击 “发布”链接。gdelt-quickstart

您将被带到 [编辑图层] 屏幕。您需要为数据边界输入值 盒。在这种情况下,您可以单击链接以从数据中计算这些值。

完成后点击 “Save” 按钮。

看一看

单击左侧装订线中的“Layer Preview”(图层预览)链接。如果你没有 查看 Quick-Start 层 在 Results 的第一页上,输入 name 的图层到搜索框中,然后按 。<Enter>

看到图层后,单击“OpenLayers”链接,该链接将打开 一个新选项卡。您应该会看到一组类似于下图的红点:

Visualizing quick-start data with GeoServer

使用 GeoServer 可视化快速入门数据

调整显示

以下是您可以使用可视化效果的几种简单方法:

  • 单击显示屏中的一个红点,GeoServer 将 报告地图区域下方的 Detail 记录。

  • 按住 Shift 键并单击可突出显示地图中所需的区域 以放大。

  • 单击左上角的 “Toggle options toolbar” 图标 的预览窗口。屏幕右侧将包括 “Filter” 文本框。Enter ,然后按 “play” 图标。显示屏现在将仅显示匹配的点 您的筛选条件。这是一个 CQL 过滤器,可以构造 以各种方式查询数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值