使用MongoDB统一电动汽车充电数据和操作,构建可扩展的、响应迅速的充电体验,并随着基础设施的发展而快速适应。
使用案例: 物联网
行业: 制造与移动
产品和工具: MongoDB Atlas、 MongoDB Search、 MongoDB时间序列
合作伙伴: Vercel、Apollo GraphQL
解决方案概述
无论您是汽车原始设备制造商 (OEM)、能源或公用事业提供商,还是移动技术初创企业,联网电动汽车 (EV) 充电都需要汇集以不同速度变化的数据,并为充电体验的不同部分提供支持。
这些数据包括:
站点位置和Connector功能。
站点可用性和活动会话。
定价。
操作事件。
随着充电网络的发展,在面向驾驶员和操作体验中保持这些数据的一致和可访问性对于提供可靠的服务和做出明智的决策变得越来越重要。
该解决方案演示了统一的操作数据层如何在MongoDB中将这些工作负载整合在一起。共享数据基础支持实时充电体验,并为操作员提供了车站和会话活动的一致视图。
在单一应用程序架构中,该解决方案可管理:
站点发现和可用性。
对预留和活动会话收费。
操作事件和遥测。
该方法使用MongoDB文档模型围绕应用程序访问权限模式组织数据,而地理空间查询支持位置感知发现,条件更新有助于保持准确的可用性,变更流将操作状态更改与下游处理连接起来。通过将运营数据整合到一个灵活的平台中,您的团队可以构建可随着网络、数据要求和运营需求的增长而进行调整的互联充电应用程序。
图 1。为电动汽车充电生态系统提供服务的数据平台概述
参考架构
该解决方案通过统一的应用架构将驾驶员体验、充电操作、车站模拟和操作数据整合在一起。
图 2。电动汽车充电演示架构
Next.js应用提供两种主节点 (primary node in the replica set)体验:
驱动程序程序应用:用于车站发现和充电会话管理。
运营控制中心:用于监控实时充电活动和运营数据。
该应用与使用 Apollo GraphQL构建的充电站管理系统 (CSMS) 进行双向通信。 CSMS 为充电工作流程提供应用合同,并将应用操作与充电站操作连接起来。该应用还通过 OpenStreetMap 与基于位置的服务集成,以支持车站发现和位置感知体验。
Python FastAPI 模拟器代表充电站活动并生成会话遥测数据。 MongoDB变更流捕获 CSMS 到模拟器工作流程的计费会话中的状态变更。模拟器使用这些事件来:
开始或停止处理计费会话。
计算模拟的充电状态。
生成会话遥测数据。
MongoDB在整个架构中提供统一的操作数据平台。它集成了端到端充电体验所需的所有数据,从驾驶员和车辆环境到充电基础设施、会话活动、操作事件和大容量遥测数据。
随着解决方案的发展,地理空间查询、时间序列集合、 Atlas Search和 Online 存档等MongoDB功能支持各种数据和访问权限模式。
数据模型方法
数据模型遵循电动汽车充电应用程序的实际工作方式:驾驶员需要充电会话的完整视图,充电站搜索需要同时考虑位置和可用性,而遥测需要作为大容量流进行处理。 MongoDB文档模型允许您围绕这些特定的访问权限模式调整每个集合。
该解决方案使用以下核心集合:
users和vehicles:存储驾驶员和车辆信息。chargingStations和chargingPoints:轨道站发现和电动汽车供电设备 (EVSE) 状态。chargingSessions:管理预订、活动会话和充电历史记录。incidents:跟踪操作问题。telemetry:存储大量充电数据。
文档模型使解决方案直观且更易于实现。
示例,chargingSessions集合使用扩展引用模式将会话历史记录数据保存在一起。除了对根本的车辆和车站的引用之外,该会话还存储相关详细信息的小快照。
{ "status": "COMPLETED", "stationSnapshot": { "name": "Downtown Mall Charging", "addressShort": "Main St 10, Zurich", "chargingPointLabel": "Bay 1" }, "vehicleSnapshot": { "make": "BMW", "model": "i3" }, "charging": { "energyDeliveredKwh": 52.4 }, "pricingSnapshot": { "currency": "EUR", "priceCentsPerKwh": 55 }, "cost": { "totalCents": 2882 } }
当驾驶员查看其会话历史记录时,该应用会从单个文档中检索此信息,而无需加入多个集合。即使根本的车站或车辆数据稍后发生变化,快照也会保留历史会话上下文。
同样的原理也简化了站点发现过程。 chargingStations集合将其位置存储为GeoJSON,从而支持MongoDB地理空间查询来查找靠近驾驶员位置的车站。它还维护计算出的可用性计数和充电点功能的有界投影,因此可以直接从车站文档回答常见的地图和搜索查询。
{ "name": "Downtown Mall Charging", "location": { "type": "Point", "coordinates": [8.5417, 47.3769] }, "availability": { "availableNowPoints": 7 }, "chargingPoints": [ { "connectors": [ { "type": "CCS", "power": 150 }, { "type": "TYPE2", "power": 22 } ] } ] }
经常更改的操作状态会保留在单独的 chargingPoints集合中,以避免在充电点状态更改时更新车站文档。随着遥测数据量的增长,这种分离还可以保持模型的高效性。
遥测具有不同的访问权限模式:它是大容量的、基于时间的且不断增长。该解决方案将遥测分开,并使用带有TTL索引的MongoDB时间序列集合来自动实施保留策略。对于寿命较长的数据, MongoDB Online 存档会将较旧的数据转移到成本较低的存储,从而提供管理数据生命周期的原生方法,而无需构建单独的存档工作流程。
{ "timestamp": "2026-02-12T08:11:58Z", "meta": { "stationId": "65c8f2e2d2f4c3a9b3b9b001", "chargingPointId": "65c8f2e2d2f4c3a9b3b9b101", "stationCode": "station-001", "chargingPointCode": "cp_station-001_01" }, "messageType": "SESSION_SAMPLE", "ok": true, "powerKw": 120, "energyKwhDelta": 0.4, "voltageV": 400, "currentA": 300, "temperatureC": 31.2 }
这些模式使实施关注应用程序的实际工作流程,同时使每种数据类型能够独立扩展和发展。其结果是一个实用的文档模型,可以在不牺牲灵活性的情况下降低应用的复杂性。
构建解决方案
要在本地运行该解决方案,请完成以下步骤:
有关完整的设置说明、本地开发选项、环境变量和其他命令,请参阅 GitHub存储库。
关键要点
统一电动汽车充电数据和操作:将驾驶员体验、充电基础设施、操作数据和遥测数据整合到单个操作数据平台上,以提高可视性并简化架构。
简化开发和演进:使用MongoDB灵活的文档模型和模式来构建收费工作流程,并根据需求的变化进行调整。
为可用性和扩展构建:结合实时数据、事件驱动的处理和原生MongoDB功能,随着基础设施和数据量的增长,支持响应式收费体验。
利用AI扩展操作:使用连接的站点、会话、事件和遥测上下文作为AI辅助支持和操作决策工作流程的基础。
作者
Rami Pinto,MongoDB
Humza Akhtar,MongoDB
Daniel Jamir, MongoDB