像车辆定位,儿童手表定位之类应用的数据是如何存储和查询的?

2022-10-15 12:26:16 +08:00
 bbsfoo

应用特点和需求: 1 、终端很多 2 、每个终端每秒都可会产生定位数据 3 、服务器端怎样接收如此多的数据?是 http 还是 socket 私有的协议? 4 、怎样快速查询出某个设备的当前定位? 5 、怎样快速查询出历史定位数据?

一般是怎样的架构啊??

1827 次点击
所在节点    程序员
5 条回复
Jet
2022-10-15 13:24:06 +08:00
IoT 领域有很成熟的解决方案了,比如 MQTT + 时序数据库。
oyasumi
2022-10-15 14:08:34 +08:00
dynamodb
wangbin526
2022-10-15 17:50:18 +08:00
肯定是 http 快啊,用 fastapi 做后台最多也就上百行代码搞定,性能也不差,频率到每秒这么高的话用 redis 做个缓存,缓存几十秒再一起插入,还不行就用 go 吧
存储量小的随便,量大的话找个时序数据库,比如国产 TDengine ,每设备一个表查询很简单的
如果需要终端随时能快速响应的话只能上 MQTT 了,Docker 部署个国产的 EMQX 也很方便,但终端还是另外用 http 发定位性能会好很多,不然开源的 EMQX 还得自己写 Hook 存数据库
a33291
2022-10-15 17:59:54 +08:00
说一下我们这边目前的实现
1. mysql 数据库,尚未引入时序数据库.但我们主要的服务方式是离线私有化部署
2. 定位设备和定制手机+定制 app 联动,定位设备采用基于 tcp 的私有协议交互(未使用 mqtt),手机端使用私有 tcp 协议+http 协议和平台交互
3. 当设备上报位置数据后,根据经纬度(坐标系转换)反查地址信息等完善基础信息(这块相对复杂,定位有 gps 基站 wifi 等),然后存入历史表并更新对应设备的最新位置
4. 历史表直接查(当前甚至未做时间窗口优化),有必要的索引,数据量一般在千万级

之前是 CS 模式,已重写为 BS.至于架构,各个系统的需求不一样,参与角色也不一样,不好说.
weak
2022-10-15 18:19:16 +08:00
MQTT 一楼正解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/887099

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX