对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

适用于 ATAK 的战术任务数据同步

在MongoDB Enterprise Advanced上构建战术应用程序,并将它们连接到 Ditto,以便在断开连接的环境中实现本地优先的任务数据同步。

使用案例:离线环境

行业: 边缘和移动,

产品和工具: MongoDB Enterprise Advanced

合作伙伴: Ditto

断开连接的字段操作会造成数据问题。现场团队需要股票位置更新、地图项、警报、文件和消息。

依赖于云的架构可以使这些工作流程依赖于持久连接。在实际操作中很难维持这一要求。当连接失败时,团队将无法访问权限当前信息。

开发者也面临着一个相关问题。它们必须支持本地存储、同步、冲突处理和命令中心可见性。单独构建这些功能会增加每个应用程序的复杂性。

该解决方案展示了如何构建在连接受限时继续运行的战术应用程序。它使用MongoDB作为数据层,将边缘同步平台连接到MongoDB,并在数据层的基础上增加功能。

使用MongoDB Enterprise Advanced作为应用程序的可信数据层。将任务实体存储为BSON文档,并将它们组织成与操作工作流程匹配的集合。 MongoDB支持在同一数据库中使用不同的文档结构。存储位置数据、地图对象、聊天消息、警报和文件,而不强制它们采用一种严格的模式。

利用这种灵活的文档模型,在一个数据平台上构建所有应用程序功能。使用MongoDB为仪表盘、API、命令工作流和下游系统提供服务。添加新的任务实体,无需重新设计整个数据库。

使用边缘同步平台 Ditto 作为边缘同步合作。 Ditto ATAK 插件将 ATAK 设备连接到本地优先的点对点网格。 ATAK 构成用于共享位置、地图、聊天和任务数据的字段应用程序。当网络访问权限发生变化或出现故障时,Ditto 可在附近设备之间同步任务数据。

然后,使用 Ditto MongoDB Connector 将 Ditto 连接到MongoDB 。该Connector可同步 Ditto 和MongoDB之间的文档,并解决两个系统之间的并发更改。

在命令中心本地运行MongoDB Enterprise Advanced 。使用MongoDB数据层构建命令中心仪表盘和其他任务应用程序。数据层和访问权限层就位后,就可以专注于应用程序功能,而不是构建单独的存储和同步服务。

使用此模式可以:

  • 将各种任务数据存储为文档。

  • 使用标准驱动程序和 API 将应用程序连接到MongoDB 。

  • 与 Ditto 集成以实现离线同步。

  • 向命令中心应用程序公开一个共享数据层。

  • 随着新任务工作流程的出现,扩展应用程序。

该架构使用MongoDB Enterprise Advanced作为命令中心的应用程序数据层。 MongoDB存储任务文档并为仪表盘、API 和操作工作流提供服务。 MongoDB Ops Manager管理本地MongoDB 部署。

Ditto MongoDB Connector 将MongoDB链接到 Ditto Server。 Ditto Server 通过 Ditto ATAK 插件将MongoDB数据层连接到 ATAK 中战术边缘的点对点网格。然后,更改会在MongoDB和 Ditto 之间同步,而不会在两个系统之间发生冲突。

MongoDB Enterprise Advanced命令中心数据层通过 Ditto MongoDB Connector 连接到 ATAK 设备的点对点网格。

图 1。显示MongoDB Enterprise Advanced作为命令中心数据层的架构,通过 Ditto MongoDB Connector 连接到为 ATAK字段设备提供服务的 Ditto 对等网格

战术边缘是字段设备在接近动作点创建和交换任务数据的层,包括在连接可能发生变化或失败的情况下运行的用户和设备。

ATAK 提供用于共享位置、地图、聊天和任务数据的字段应用程序。 Ditto ATAK 插件捕获该数据,并通过点对点网格在附近的设备之间进行同步。 Ditto 使用可用的传输,如低功耗蓝牙、Wi-Fi、点对点 Wi-Fi 和 MANET 兼容路径。 Ditto 还可以在网格中的多个设备之间中继数据。

边缘充当应用程序数据的另一个来源。 Ditto 保持数据可用并在设备之间移动。 MongoDB会存储同步的文档,并使其可供命令中心应用程序使用。

MongoDB Enterprise Advanced提供中央应用程序数据层。仪表盘从MongoDB读取任务数据,并通过地图、节点状态视图和通信源进行呈现。

Ditto MongoDB Connector 监听 Ditto 和MongoDB中的更改。它将这些更改应用到其他系统中,并使两个数据存储保持一致。

基于MongoDB构建的应用程序查询和更新任务文档,而无需直接连接到 ATAK 设备。 Ditto 处理与断开连接的边缘设备之间的传输。这种集成允许您针对MongoDB而不是直接针对 ATAK 设备构建命令中心应用程序。

MongoDB存储任务数据。 Ditto 保持字段设备同步。 ATAK 提供字段应用程序。Connector链接两个环境并解决并发更改。

这种分离使每种技术都专注于一项职责。 MongoDB提供应用程序数据层,Ditto 跨战术边缘同步数据,ATAK 提供字段经验。

这种设计允许您根据 MongoDB 的文档模型构建应用程序功能,而无需为每个设备或网络条件实现单独的存储模型。

将每个任务实体存储在与应用程序使用方式相匹配的文档中。

位置更新、地图对象和聊天消息具有不同的字段和更新模式。将它们存储在单独的集合中,而不是强制每个实体采用一种严格的模式。这种方法使数据模型接近边缘生成的数据,并减少 Ditto 和MongoDB之间的转换代码。这些文档可用于离线边缘的实时分析和AI查询。

Ditto ATAK 插件写入 Ditto ATAK v2模式。该模式对基于 CoT 的数据使用紧凑的字段名称。以下示例显示了与应用程序开发最相关的领域。

使用 track集合获取来自字段参与者的位置和状态数据。查询这些文档以在命令中心地图上显示当前和过时的设备。

{
"_id": "ANDROID-4486046569cda611", // document identifier
"_r": false, // soft-delete flag
"c": "MDB Actor 2", // display name
"d": "ANDROID-4486046569cda611", // source device
"e": "MDB Actor 2", // actor callsign
"j": 19.451227, // latitude
"l": -99.139832, // longitude
"o": 1776886448640, // stale time
"w": "a-f-G-U-C" // CoT type
}

紧凑模式使同步的文档接近于 ATAK 生成的数据。 MongoDB存储文档时不需要单独的关系映射层。

将 chat集合用于字段用户和命令工作流程之间交换的消息。该集合使用与追踪不同的形状,其中包含消息文本、发件人、房间和时间戳字段。

{
"_id": "b547f0b4-c371-4aff-ac1d-3bafe110a9e1", // message identifier
"_r": false, // soft-delete flag
"authorType": "a-f-G-U-C", // sender CoT type
"b": 1776735193948, // message timestamp
"d": "COMMAND-VEHICLE", // source device
"e": "COMMAND", // sender callsign
"msg": "Command", // message text
"room": "Ditto", // room name
"roomId": "ChatContact-Ditto" // room identifier
}

MongoDB允许应用程序将消息文档与 track 文档一起存储,而无需添加空位置字段或强制两个实体采用相同的结构。

将 mapitem集合用于持久地图图形和共享任务对象。

使用 MongoDB 的文档模型,按照应用程序所需的形式存储每个任务实体。将 track、mapitem 和 chat 保留在不同的集合中,因为它们代表不同的数据和访问权限模式。这种方法可以让您构建地图、状态和通信功能,而无需将所有任务数据强制采用一个严格的模式。

Collection
用途
示例应用程序使用

track

位置和状态数据

渲染字段actor 和过时节点。

mapitem

持久映射对象

显示共享标记和地图图形。

chat

消息和对话元数据

在命令中心仪表盘显示通信。

将每个集合用于一个任务函数,并将所有集合保留在一个MongoDB数据层中。添加字段或新任务实体,而无需重新设计现有集合。

针对MongoDB构建仪表盘、API 和命令中心工作流程。根据其用途查询每个集合,并保留从边缘到达的文档结构。

使用此方法可以:

  • 减少 Ditto 和MongoDB之间的数据转换。

  • 保持每个任务实体易于查询。

  • 添加新字段,无需重新设计不相关的文档。

  • 扩展应用程序,无需为每个设备或工作流程创建单独的存储模型。

使用 tak-situational-demo Github存储库来部署和探索解决方案。

1

在继续之前,请确保您满足以下要求:

  • 设置两台或更多 Android 设备。

  • 确保每台设备运行 Android 13 或更高版本,具有至少 4 GB RAM。

  • 在每台设备上安装 ATAK CIV 并批准所有必要的设备权限,包括 GPS访问权限。

  • 获取 Ditto ATAK 插件并将应用程序旁加载到每部手机上。

  • 将每台设备加入托管命令站的本地 Wi-Fi 环境。

2

在继续之前,请确保您满足以下要求:

  • 安装Docker、Kind、kubectl 和 Helm。嵌入式自动化脚本会自动构建Kubernetes部署。

  • 分配 32 GB系统内存。系统至少需要 24 GB ,因为Ops Manager、Ditto Server 日志和MongoDB Enterprise Advanced 的总和超过了 16 GB限制。

  • 为容器映像和持久数据卷保留 30 GB的本地存储容量。

  • 清除端口 80 和 443,将流量路由到可运行的 Web 视图和 Ditto Server 组件。

3

从根文件夹执行 make setup。出现任何错误后,您可以安全地重新运行此脚本,因为它会从停止的地方继续运行。它按顺序初始化组件:

此脚本为此解决方案创建数据库、用户和集合。等待 25 到 35 分钟进行初始设置。

完成后,输出显示仪表盘URL、 Compass连接字符串、 Ops Manager凭证和边缘设备所需的配对值。

执行 make verify 以验证您的环境。此步骤将文档插入MongoDB并通过 Ditto Server 检索该文档,从而检查双向同步。

有关完整的命令、配置详细信息和部署清单,查看TAK 情况演示存储存储库中的 docs/RUN_LOCAL.md。

4

使用 Ditto MongoDB Connector 自动配置。将Connector声明为Kubernetes BigPeerDataBridge资源,以在战术单位和指挥中心应用程序之间双向同步track、mapitem、chat、file 和 alert 集合。

将 Ditto 服务器托管在与MongoDB相同的Kubernetes集群中,以便在内部路由流量。通过标准MongoDB连接字符串进行连接,无需公开公共端点或管理IP白名单。

在初始化Connector之前验证这些先决条件:

  • 确认目标数据库和集合存在。

  • 向Connector用户授予 readWrite 权限。

  • 在所有同步集合上启用 changeStreamPreAndPostImages,以保持平台之间的因果一致性。

应用软删除标志 (_r: true) 来标记已过时的文档。 MongoDB中的硬删除触发Ditto 中的永久清除操作。使用 _r: false 筛选器查询操作数据。

查看 Ditto Operator MongoDB Connector 文档以了解其他选项。

5

启动操作用户界面,然后单击“添加设备”。该叠加层显示一个 QR 码以及以下文本参数: App ID、身份验证端点、WebSocket 端点和 Playground 令牌。运行 make pair 以在终端中显示这些凭证。

在每个目标硬件设备上启动 ATAK 和 Ditto ATAK 插件。扫描生成的 QR 码或在插件偏好设置中输入连接变量。关闭 Ditto 云同步,将网络流量引向本地 Ditto 服务器部署。

打开位置服务,以便 ATAK 生成位置遥测数据。对加入本地网状网络的每个设备重复这些配置步骤。遥测更新会快速呈现在中央仪表盘地图上。

查看 TAK 情况演示存储库中的 docs/RUN_LOCAL.md,获取分步设备载入说明。

6

通过 http://localhost 访问操作仪表盘。映射界面会显示字段角色并调暗非活动节点。遥测面板提供活动呼号,而聊天窗口则流式传输字段传输。

直接从中央界面调度消息或删除地图标记。仪表盘将新文档写入MongoDB,Connector通过 Ditto Server 将更新广播到共享数据层上的每个配对手持设备。

将MongoDB Compass连接到 localhost:27017 以检查原始应用程序文档,并打开Ops Manager像生产管理员一样监控集群。

  • 首先构建应用程序数据层:使用MongoDB Enterprise Advanced为仪表盘、API 和命令中心工作流程存储和提供服务任务数据。

  • 将任务实体建模为文档:使用MongoDB集合存储位置数据、地图对象、聊天消息、文件和警报,而无需强制使用严格的模式。

  • 将MongoDB连接到边缘:使用 Ditto MongoDB Connector 将MongoDB支持的应用程序扩展到断开连接的 ATAK 设备。

  • 简化应用程序开发:根据一个MongoDB数据层构建应用程序功能,而不是为每种设备或网络条件创建单独的存储模型。

  • 离线操作设计:将 MongoDB 的持久性文档存储与 Ditto 的本地优先同步和冲突处理相结合。

  • Timothy Marland, MongoDB

  • Alberto Camarena Rodriguez, MongoDB