一、方案背景

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

需求场景

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

样例如下:
注:该样例提供了【亿量级】轨迹数据。

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

表格存储(TableStore)方案

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

二、搭建准备

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

1、开通表格存储

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

2、创建实例

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

创建实例后,提交工单申请多元索引功能邀测(商业化后默认打开,不使用不收费)。

  • 邀测地址:提工单,选择【表格存储】>【产品功能、特性咨询】>【创建工单】,申请内容如下:
  • 问题描述:请填写【申请SearchIndex邀测】
  • 机密信息:请填写【地域+实例名】,例:上海+myInstanceName

3、SDK下载

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

java-SDK

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

go-SDK

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

4、表设计

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

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

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

1、创建数据表

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

2、创建数据表索引

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

3、数据导入

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

表名: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轻松实现轨迹管理与地理围栏相关推荐

  1. 《TableStore最佳实践:轻松实现轨迹管理与地理围栏》

    一.方案背景 轨迹管理系统日常生活中使用非常普遍,如外卖派送轨迹.快递物流流转.车辆定位轨迹等.该场景与地理位置管理类似,核心点与瓶颈都在数据库的存储性能与查询能力,同时需要时间字段正序排列,保证轨迹 ...

  2. 地理围栏 | EXCEL表格中分析轨迹坐标是否在设定的围栏范围内

    1 前言 地理围栏(Geo-fencing)是LBS的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界.当手机进入.离开某个特定地理区域,或在该区域内活动时,手机可以接收自动通知和警告.有了地理围 ...

  3. Elastic:运用 Elastic Maps 实时跟踪,可视化资产分布及地理围栏告警(一)

    你对资产跟踪感兴趣吗? 好消息! 使用Elastic 地图应用可以轻松可视化和分析移动的数据. 你可以跟踪 IoT 设备的位置并监控运输途中的包裹或车辆. 在本教程中,你将查看来自俄勒冈州波特兰市的实 ...

  4. 从地理围栏看物联网安防

    物联网技术与智能化技术正在深度融合,加快行业的智能化发展,促使行业需求在应用层上落地.安防行业作为信息技术产业的重要组成部分,其发展备受关注.目前,现代安防和物联网在业务和技术上的融合正发生着剧烈的变 ...

  5. mysql 围栏_地理围栏

    地理围栏技术 本词条缺少信息栏.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 地理围栏(Geo-fencing)是LBS的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界.当手机 ...

  6. 设置电子围栏 高德地图_地理围栏-API文档-开发指南-Web服务 API | 高德地图API

    产品介绍 地理围栏服务是一类HTTP接口,提供在服务端,增删改查地理围栏的功能,同时支持对于设备与围栏关系进行监控. 适用场景 地理围栏服务适用于需要针对特定区域,监控用户位置与区域关系的场景中.包括 ...

  7. 基于Android的谷歌地图地理围栏功能开发

    第一步.Android使用谷歌地图权限 Android上使用谷歌地图 必备条件:翻墙.Android设备上安装Google Play Service 由于谷歌在国内已经被墙了,所以我们只能使用翻墙软件 ...

  8. 基于uni-app与百度地图API实现简易前后端分离的地理围栏应用

    一.引言 地理围栏(Geo-fencing)是LBS 的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界.当手机进入.离开某个特定地理区域,或在该区域内活动时,后台可以感知到这一变化,同时手机可以 ...

  9. vue使用高德地图画电子围栏_地理围栏-辅助功能-开发指南-iOS 定位SDK | 高德地图API...

    以下内容自 iOS 定位SDK V2.3.0 后支持. 第 1 步,引入头文件 在调用地理围栏功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件,注意 ...

最新文章

  1. matlab程序eX2_2是什么意思,第2章 MATLAB程序设计
  2. VITIS 2019.2使用非正式测评
  3. 工作那些事(十六)面试时,面试官喜欢的非技术问题汇总
  4. VS新建工程或者新建项时 出现未定义标识符号
  5. 深度学习(part1)--机器学习及深度学习基础
  6. sharepoint 2013 个人站点母版
  7. 找出数组中前K大的值
  8. C#下如何实现服务器 + 客户端的聊天程序
  9. 七七计算机论文网,qepipnu
  10. notes java api_如何使用Java来调用Notes API发送邮件(包括附件)
  11. 一文掌握Python集合的语法与应用
  12. 编程修养 阅读笔记三
  13. python步骤切片_python中的切片操作
  14. python求解LeetCode习题Find Peak Element in Given num_list
  15. DXGI 方式采集流程
  16. python word转pdf图片格式_Python将Word转成PDF
  17. BAT解密:互联网技术发展之路(1) - 技术发展的驱动力
  18. 小程序 初始化 登录 流程
  19. 已知屏幕的分辨率,整么计算屏幕比例?
  20. android 将app添加进入文件的打开方式

热门文章

  1. google 浏览器默认打开控制台_chrome浏览器使用 Console(控制台)
  2. python压缩文件夹为zip_python打包压缩文件夹zip+组装文件夹
  3. 树莓派 python spi,树莓派测试SPI-基于设备操作ioctl
  4. 易安卓 html5,Developing a Multi Platforms Web Applications for Mobile Device Using HTML5
  5. 安卓 监听 mysql_Android监听数据库的值改变与否
  6. linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput
  7. 高能预警!这些段子已刷爆大学老师朋友圈
  8. 科学证明夜猫子都死得早?稳住,事情不是这样的
  9. 卷烟厂招工内卷:要求本科以上,但报名的硕士太多
  10. 【文末有福利】破解逆概率的迷思