基于Tablestore实现海量摩托车轨迹管理

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
对象存储 OSS,内容安全 1000次 1年
简介: 基于TableStore轻松实现亿量级轨迹管理与地理围栏

一、方案背景

轨迹管理系统日常生活中使用非常普遍,如外卖派送轨迹、快递物流流转、车辆定位轨迹等。该场景与地理位置管理类似,核心点与瓶颈都在数据库的存储性能与查询能力,同时需要时间字段正序排列,保证轨迹点顺序;一方面,存储服务需要应对海量数据的低延迟存、读,另一方面,存储服务也要提供高效的多维度数据检索与排序。表格存储(TableStore)对于轨迹管理场景,依然可以胜任,完全具备实现轨迹管理系统的能力。
不妨来体验一下基于TableStore打造的【亿量级摩托车管理系统】样例;

需求场景

某城市市区出于安全考虑,限制摩托车进入一定的区域范围。某摩托车租赁公司,为了更好管理所辖摩托车的违章问题,对自己所辖摩托车安装定位系统,定时采集摩托车位置。摩托车租赁公司,可以通过轨迹管理平台,查询统计违章情况,也可作为依据,提醒违章的租赁用户,过多违章拉入黑名单;
查询场景:【2018年11月01日】编号【id00001】的摩托车行驶轨迹与违章情况查询;

样例如下:
注:该样例提供了【亿量级】轨迹数据。官网控制台地址:项目样例

testGeoTrack

样例内嵌在表格存储控制台中,用户可登录控制台体验系统(若为表格存储的新用户,需要点击开通服务后体验,开通免费,订单数据存储在公共实例中,体验不消耗用户存储、流量、Cu)。

表格存储(TableStore)方案

采用表格存储(TableStore)轻松搭建一套:亿量级摩托车管理系统。多元索引功能提供GEO检索、多维查询的能力,通过对时间的排序获取追踪设备的轨迹。同时,用户可随时创建索引然后完成自动同步,不用担心存量数据问题。
TableStore作为阿里云提供的一款全托管、零运维的分布式NoSql型数据存储服务,具有【海量数据存储】、【热点数据自动分片】、【海量数据多维检索】等功能,有效的地解决了GEO数据量大膨胀这一挑战;
SearchIndex功能在保证用户数据高可用的基础上,提供了数据多维度搜索、排序等能力。针对多种场景创建多种索引,实现多种模式的检索。用户可以仅在需要的时候创建、开通索引。由TableStore来保证数据同步的一致性,这极大的降低了用户的方案设计、服务运维、代码开发等工作量。

二、搭建准备

若您对于基于TableStore实现的【亿量级摩托车管理系统】体验不错,并希望开始自己系统的搭建之旅,只需按照如下步骤便可以着手搭建了:

1、开通表格存储

通过控制台开通表格存储服务,表格存储即开即用(后付费),采用按量付费方式,已为用户提供足够功能测试的免费额度。表格存储官网控制台免费额度说明

2、创建实例

通过控制台创建表格存储实例,选择支持多元索引的Region。(当前阶段SearchIndex功能尚未商业化,暂时开放北京,上海,杭州和深圳四地,其余地区将逐渐开放)

image | left

创建实例后,提交工单申请多元索引功能邀测(现多元索引功能已商业化,无需申请)。

image | left

3、SDK下载

使用具有多元索引(SearchIndex)的SDK,官网地址,暂时java、go、node.js三种SDK增加了新功能

java-SDK

<dependency>
    <groupId>com.aliyun.openservices</groupId>
    <artifactId>tablestore</artifactId>
    <version>4.8.0</version>
</dependency>

go-SDK

$ go get github.com/aliyun/aliyun-tablestore-go-sdk

Nodejs-SDK

$ npm install tablestore@4.1.0

4、表设计

店铺检索系统样例,仅简易使用一张店铺表,主要包含字段:店铺类型、店铺名称、店铺地理位置、店铺平均评分、人均消费消等。表设计如下:
表名:geo_track

列名 数据类型 索引类型 字段说明
_id(主键列) String MD5(mId + timestamp)避免热点
mId String 摩托车编号
timestamp long LONG 时间点(毫秒时间戳)
pos String GEO_POINT 车辆位置:"30.132,120.082"(纬度,精度)
... ... ... ...

三、开始搭建(核心代码)

1、创建数据表

用户仅需在完成邀测的实例下创建“摩托车轨迹表”:通过控制台创建、管理数据表(用户也可以通过SDK直接创建):其他表如租赁用户表、摩托车信息表等,根据需求创建:这里仅展示轨迹表,表名:geo_track

image.png | left | 827x343

2、创建数据表索引

TableStore自动做全量、增量的索引数据同步:用户可以通过控制台创建索引、管理索引(也可以通过SDK创建索引)

image.png | left | 827x411

image.png | left | 827x230

3、数据导入

插入部分测试数据(控制台样例中插入了1.08亿条(1万辆摩托70天24小时*6个"10分钟点")数据,用户自己可以通过控制台插入少量测试数据);

image.png | left | 747x145

表名:geo_track

摩托车编号 轨迹点md5(mId + timestamp)(主键) 时间 店铺位置
id00001 f50d55bec347253c24dc9144dff3e3b7 1541103600000 30.30094,120.01278

表名:moto_user

摩托车编号(主键) 摩托车颜色 摩托车品牌 摩托车租赁用户
id00001 银灰色 H牌摩托车 杨六

4、数据读取

数据读取分为两类:

主键读取(摩托车信息查询)

基于原生表格存储的主键列获取:getRow, getRange, batchGetRow等。主键读取用于索引(自动)反查,用户也可以提供主键(摩托车编号)单条查询的页面,查询速度极快。单主键查询方式不支持多维度检索;

索引读取(轨迹信息查询)

基于新SearchIndex功能Query:search接口。用户可以自由设计索引字段的多维度条件组合查询。通过设置选择不同的查询参数,构建不同的查询条件、不同排序方式;目前支持:精确查询、范围查询、前缀查询、匹配查询、通配符查询、短语匹配查询、分词字符串查询,并通过布尔与、或组合。
如【2018年11月01日,id00001号摩托车,行驶轨迹及违章查询】Query条件如下:

List<Query> mustQueries = new ArrayList<Query>();
List<String> polygonList = Arrays.asList(//地理围栏,禁摩区域
    "30.262348,120.092127",
    "30.311668,120.079761",
    "30.332413,120.129371",
    ...
);
String mId = "id00001";
Long timeStart = [2018-11-01时间戳];
Long timeEnd = [2018-11-02时间戳];

GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery();
geoPolygonQuery.setPoints(polygonList);
geoPolygonQuery.setFieldName("pos");
mustQueries.add(geoPolygonQuery);

TermQuery termQuery = new TermQuery();
termQuery.setFieldName("mId");
termQuery.setTerm(ColumnValue.fromString(request.getmId()));
mustQueries.add(termQuery);

RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("timestamp");
rangeQuery.setFrom(ColumnValue.fromDouble(timeStart, true);
rangeQuery.setTo(ColumnValue.fromDouble(timeEnd, false);
mustQueries.add(rangeQuery);

BoolQuery boolQuery = new BoolQuery();
boolQuery.setMustQueries(mustQueries);

四、欢迎加入

这样,系统的核心代码已经完成,基于表格存储搭亿量级“摩托车管理系统”,是不是很简单?
对表格存储(TableStore)感兴趣的用户,欢迎加入【表格存储公开交流群】,群号:11789671。

image | left

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
阿里云表格存储使用教程
表格存储(Table Store)是构建在阿里云飞天分布式系统之上的分布式NoSQL数据存储服务,根据99.99%的高可用以及11个9的数据可靠性的标准设计。表格存储通过数据分片和负载均衡技术,实现数据规模与访问并发上的无缝扩展,提供海量结构化数据的存储和实时访问。 产品详情:https://www.aliyun.com/product/ots
目录
相关文章
|
存储 NoSQL JavaScript
Tablestore入门手册--表(Table)管理
表管理接口概述 API 描述 createTable 创建表 deleteTable 删除表 listTable 列出实例下的所有表 updateTable 更新表(在表被创建之后,动态的更改表的配置或预留吞吐量)
1970 0
|
存储 监控 NoSQL
基于Tablestore管理海量快递轨迹数据架构实现
对于一个快递公司,在全国范围内有着大量的快递点、快递员、运输车辆以及仓储中心。而快递自产生后,就会在这些地点、人物之间流转。因而,一套完善的快递管理追踪系统是快递公司的重要管理工具; 用户通过平台客户端下单后,产生唯一的快递单号作为唯一身份标识。
12038 1
|
存储 NoSQL Java
基于Tablestore实现海量运动轨迹数据存储
前言 现在越来越多的人都开始关心自己的运动数据,比如每日的计步、跑步里程、骑行里程等。运动APP与运动类的穿戴设备借助传感器、地图、GPS定位等技术,收集好运动数据以后,通过与互联网社交功能结合,产生了一种新的运动模式。
6558 0
|
存储 NoSQL Java
基于Tablestore的共享汽车管理平台
前言 目前出行市场主要分为传统和新兴两个阵营:私家车、公共交通、出租车和长租车为传统出行提供服务,共享单车、网约车以及分时租赁共享汽车则是最近几年兴起的出行方式。_图1 出行方式分析_出行者往往是在成本和出行便捷之间权衡选择出行方式。
4746 0
|
存储 索引
表格存储根据多元索引查询条件直接更新数据
表格存储是否可以根据多元索引查询条件直接更新数据?
113 3
|
SQL NoSQL 数据可视化
玩转Tablestore:使用Grafana快速展示时序数据
Grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,可以通过将采集的数据查询然后可视化的展示,实现报警通知;Grafana拥有丰富的数据源,官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQ
1754 0
玩转Tablestore:使用Grafana快速展示时序数据
|
4月前
|
DataWorks NoSQL 关系型数据库
DataWorks产品使用合集之如何从Tablestore同步数据到MySQL
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
分布式计算 DataWorks API
DataWorks常见问题之按指定条件物理删除OTS中的数据失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
6月前
|
DataWorks NoSQL 关系型数据库
可以使用dataworks从tablestore同步数据到mysql吗?
可以使用dataworks从tablestore同步数据到mysql吗?
72 1