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

一、方案背景

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

需求场景

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

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

testGeoTrack

样例内嵌在表格存储控制台中,用户可登录控制台体验系统(若为表格存储的新用户,需要点击开通服务后体验,开通免费,订单数据存储在公共实例中,体验不消耗用户存储、流量、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)避免热点
mIdStirng 摩托车编号
timestamplongLONG时间点(毫秒时间戳)
posStringGEO_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)(主键)时间店铺位置
id00001f50d55bec347253c24dc9144dff3e3b7154110360000030.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);

 


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蚂蚁金服、微众银行、度小满都来了,智能金融将何去何从?(文末福利)

&#xff08;大会官网 https://t.csdnimg.cn/U1wA&#xff09;金融业是一个数据堆砌起来的行业&#xff0c;有客户信息、风险控制数据、交易数据等等&#xff0c;如果这些数据没有被有效的管理和分析&#xff0c;会增加企业的经营风险和降低企业的盈利能力。但有了云计算与人工…

RuoYi-Vue 部署 Linux环境 若依前后端分离项目(jar包+nginx 单机版本)

文章目录一、软件安装部署1. 安装jdk2. mysql8安装部署3. redis安装4. nginx 安装部署5. 克隆项目二、后端项目2.1. 修改数据库连接2.2. 修改Redis连接信息2.3. 文件路径2.4. 日志存储路径调整2.5. 编译打包三、前端项目3.1. 安装依赖3.2. 构建生产环境四、项目部署4.1.创建目录…

五子棋项目结束总结_居家活动系列总结

刚开始一直待家里真的好无聊......不过后来电气学院举办了一系列线上活动&#xff0c;在家里也能参与&#xff01;我们一起来看看吧&#xff01;厨艺比赛2020年3月2日-3月6日&#xff0c;为了鼓励大家好好利用假期时间&#xff0c;享受生活。电气工程学院学生会举办“厨艺分享”…

4K超清,2500万人在线,猫晚直播技术全解读

2018天猫双11已经过去一周&#xff0c;各路快递也在快马加鞭送到大家手中。但对于剁手党而言&#xff0c;天猫双11也不仅仅是简单意义上的“买买买”&#xff0c;更是一场边看边玩的狂欢盛宴。 作为双11的必备节目&#xff0c;今年的猫晚通过优酷、浙江卫视、东方卫视进行了全…

shell取当前月份第一天_红帽认证8.0版本即将发布!Ansible和shell脚本自动化将重点考察...

红帽厂商官方通知&#xff0c;红帽RHCE考试&#xff08;包含EX200和EX300两门&#xff09;版本7的截止时间是&#xff1a;2020年4月30日。 即2020年5月份之后将停止版本7的考试&#xff0c;包括正考和补考。RHCE版本7中包含EX200&#xff08;v7&#xff09;和EX300&#xff08;…

阿里云重磅发布RDS for SQL Server AlwaysOn集群版

2018年双十一刚过&#xff0c;阿里云数据库发布RDS for SQL Server AlwaysOn集群版&#xff0c;这是业界除微软云SQL Database外&#xff0c;首家云计算公司基于SQL Server最新AlwaysOn核心技术实现的数据库集群版&#xff0c;并且是经过双十一检验的商业化版本。 全形态的产品…

Linux Shell脚本_设置时区并同步时间

① 脚本编写 vim autoSyncTime.sh脚本内容&#xff1a; ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime if ! crontab -l |grep ntpdate &>/dev/null ; then(echo "* 1 * * * ntpdate ntp1.aliyun.com >/dev/null 2>&1";hwclock -w;cro…

“12306”的架构到底有多6?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 绘你一世倾城责编 | 阿秃每到节假日期间&#xff0c;一二线城市返乡、外出游玩的人们几乎都面临着一个问题&#xff1a;抢火车票&#xff01;12306 抢票&#xff0c;极限并发带来的思考虽然现在大多数情况下都能订到票&…

【阿里云总监课第四期】时髦的云原生应用怎么写?

概述 应用已经跨入了云原生的时代。要写一个时髦的云原生应用&#xff0c;首先当然要了解什么是云原生。CNCF&#xff0c;也就是云原生计算基金会&#xff0c;作为目前人气最旺的云计算行业协会&#xff0c;在今年6月份给出了云原生的定义&#xff0c;阿里云牵头做了一个官方的…

信号扫描_图文并茂,一文读懂信号源

信号源是四大通用电子测量仪器之一&#xff0c;其他三种是&#xff1a;网络分析仪&#xff0c;频谱分析仪和示波器。这篇介绍信号源所涉及的相关基础知识。信号源的最常用的功能是用来产生一个正弦波&#xff0c;所以先从介绍正弦波的特征开始本篇文章。一、正弦波的信号特性通…

支撑双十一的网络引擎:飞天洛神

对刚刚过去的2018天猫双十一&#xff0c;各位网友应该记忆犹新。尤其是午夜零点时&#xff0c;亿万网友几乎不约而同地打开满满的购物车&#xff0c;抢下商家优惠券和红包&#xff0c;完成下单&#xff0c;付款这一系列流程。根据我个人的经历&#xff0c;这次体验堪称顺畅&…

IPv6时代已来:双十一中的IPv6大规模应用实践

摘要&#xff1a; 刚刚过去的双十一&#xff0c;大家对猫晚、抢红包、组团购还记忆犹新。大家不了解的是&#xff0c;不知不觉间&#xff0c;你可能已经成为首批互联网IPv6用户了。今年天猫双十一期间&#xff0c;阿里巴巴全面支持了IPv6&#xff0c;这是IPv6在我国的互联网领域…

说真的,程序员相亲,真的太太太太太太难了 | IT巨能唠

众所周知&#xff0c;程序员这个群体&#xff0c;是单身狗的重灾区&#xff01;程序员的成就感&#xff0c;来自于公众对他代码的认可&#xff01;因此&#xff0c;广大程序员将大量精力时间用于技术&#xff0c;他们关注新技术的诞生&#xff0c;关注自身内功的修炼&#xff0…

阿里云实时计算的前世“功”今生“能”

前言&#xff1a; 不修内功&#xff0c;难成大器。为了将Apache Flink在阿里巴巴真正运行起来&#xff0c;阿里巴巴实时计算团队做了大量的优化&#xff0c;在阿里云上的产品正式命名为实时计算&#xff0c;以Flink SQL为主要API&#xff0c;致力于打造一款全球领先的实时计算引…

多方法调用 一个出错 集体回滚_一个@Transaction哪里来这么多坑?

前言在之前的文章中已经对Spring中的事务做了详细的分析了&#xff0c;这篇文章我们来聊一聊平常工作时使用事务可能出现的一些问题(本文主要针对使用Transactional进行事务管理的方式进行讨论)以及对应的解决方案事务失效事务回滚相关问题读写分离跟事务结合使用时的问题事务失…

4K修复版《海上钢琴师》登陆全国院线,一文读懂背后的黑科技!

最近有件大事&#xff0c;11 月 15 日&#xff0c;全球瞩目的经典电影《海上钢琴师》4K 修复版登陆了全国院线。岁月侵蚀的影片经典场景&#xff0c;在老胶片的保存下只剩模糊的影像。而此次经 4K 技术修复的版本&#xff0c;据说采用了先进的图像超分辨率技术&#xff0c;分辨…

因为看见,所以发现:QBotVariant谢绝落幕

互联网给人带来便捷的同时&#xff0c;其公开大量的资源也同样给恶意利用者带了便捷&#xff0c;越来越多公开的恶意程序源码降低了对外攻击、入侵的难度&#xff0c;使得安全问题愈加严重。 阿里云安全团队从今年5月份监测到一BOT家族&#xff0c;其样本改写自互联网公开渠道…

Linux Shell脚本_历史命令显示操作时间

当前用户什么时间执行的什么命令 ① 脚本编写 创建脚本 vim displayHisoperTime.sh添加脚本内容如下&#xff1a; if ! grep HISTTIMEFORMAT /etc/bashrc; thenecho export HISTTIMEFORMAT"%F %T whoami " >> /etc/bashrc fi保存退出:wq ② 运行脚本 chmo…

5G套餐到底该不该换?看完你就明白啦!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小枣君责编 | 阿秃此前&#xff0c;三大运营商正式宣布5G商用&#xff0c;并公布了各自的5G资费套餐。毫无意外&#xff0c;正式公布出来的套餐内容&#xff0c;和之前运营商内部泄露的内容完全一致。5G套餐公布之后&#xf…

最in的一期,来自大厂的邀请|C课有道

毋庸置疑&#xff0c;现在是“一切皆数”的时代&#xff0c;放眼目前炙手可热的大数据、人工智能等创新技术&#xff0c;如果没有数据加以支撑&#xff0c;一切的一切将毫无用武之地&#xff0c;更不必谈信息化、智能化and so on&#xff0c;而数据库作为存储和承载数据的重要场…