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/520528.shtml

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

相关文章

i 智慧 | 为云而生、多快好省,这就是星星海的style!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 晶少责编 | 阿秃出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;不久之前&#xff0c;腾讯云刚刚对外上新了一款服务器&#xff0c;号称深度自研且独一无二&#xff0c;其名字也十二分的卡哇伊&#xff0…

看图了解RocksDB

它是一个高性能的Key-Value数据库。设计了完善的持久化机制&#xff0c;同时保证性能和安全性。能够良好的支持范围查询&#xff0c;因为K-V记录就是按照Key来排序的。 下图为写入的流程&#xff1a; 可以看到主要的三个组成部分&#xff0c;内存结构memtable&#xff0c;类似…

当Kubernetes应用遇到阿里分批发布模式

对于熟悉Kubernetes的用户来说&#xff0c;应该知道当你的应用程序一旦部署到Kubernetes以后&#xff0c;Kubernetes能够自动帮你管理应用程序&#xff0c;当Pod发生故障后可以自动调度重建&#xff0c;确保服务的持续可用。但Kubernetes的原生发布策略难以满足生产级别的发布要…

一分钟搭建、运行、测试SSM项目

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

1 io口 stm32_从STM32分享各种硬件以及总线之GPIO简介

今天有网友私信我&#xff0c;问我怎么没有更新文章&#xff0c;我有点惭愧没有能够及时更新文章。因为都没有太多时间准备&#xff0c;所以更新的有点慢&#xff0c;但是我还是决定每天给大家分享一点知识。之前我们讲了STM32的时钟&#xff0c;讲完时钟之后我开始为大家讲一些…

亚太CDN年度盛典:阿里云姚伟斌发表《场景化的CDN技术》主题演讲

在11月14日的2018亚太CDN年度盛典上&#xff0c;阿里云资深技术专家姚伟斌&#xff08;文景&#xff09;发表了《场景化的CDN技术》主题演讲&#xff0c;他认为&#xff0c;当下的CDN&#xff0c;需要根据过去CDN的发展历程&#xff0c;更清晰地分析客户不同场景下的不同需求&a…

IBM在中国发布Cloud Paks,牵手神州数码,助力企业云转型步入“第二篇章”

2019年11月5日&#xff0c;北京盘古大观IBM大中华区总部&#xff0c;2501会议室。不到80平的会议室里挤了50多人&#xff0c;包括记者、分析师&#xff0c;以及来自IBM中国和神州数码的高管和专家—— 参会记者&#xff1a;通常是开会的地方越小&#xff0c;事儿越大…… 神州…

Vue 快速集成ElementUI

App.vue作为Vue项目的主窗口<router-view></router-view>让路由生效 main.js负责加载插件组件等 views&#xff1a;放页面 components&#xff1a;放组件 router&#xff1a;路由配置&#xff1a;相当于springmvc的视图解析器将url和组件进行关联Element UI 后台管…

双11个性化推荐背后,阿里云“舜天”如何应对百亿次挑战?

2018天猫双11在技术世界&#xff0c;创下不少新记录&#xff0c;其中有一个记录是11日当天阿里全平台共为用户做个性化推荐453亿次&#xff0c;这些推荐的图片长度加起来可以绕地球70圈。 当你在天猫/手淘上买买买的时&#xff0c;图片会以不同格式或分辨率来转码呈现&#xf…

重磅发布!阿里云推PostgreSQL 10 高可用版

2015年&#xff0c;阿里云宣布正式推出RDS for PostgreSQL服务,届时&#xff0c;阿里云成为国内首家同时支持MySQL、SQL Server 和PostgreSQL关系型数据库的云计算服务商。 用户在云上就能享受PostgreSQL引擎带来的对SQL标准和NoSQL的高度兼容、强大的处理复杂查询能力、以及丰…

axios专栏

axios 基于promise用于浏览器和node.js的http客户端 支持浏览器和node.js 支持promise 能拦截请求和响应 自动转换JSON数据 能转换请求和响应 数据 axios基础用法 get和 delete请求传递参数 通过传统的url 以 ? 的形式传递参数 restful形式传递参数 通过params 形式传递参数…

【双11】阿里云边缘节点ENS助力淘宝构建音视频通信网络

前言 淘宝在2016年推出直播平台&#xff0c;和娱乐直播性质不同&#xff0c;电商直播的主角多为网红店铺及网红达人&#xff0c;以直播带动产品售卖。在淘宝的双11流量加持之下&#xff0c;淘宝直播平台关注度持续攀升&#xff0c;通常的网红店主一场直播带来的收益不亚于一场…

护航Lazada双11购物节 阿里云CDN全球化火力全开

2018年11月12日零点——东南亚最大的电子商务公司Lazada 2018双11购物节正式收官。这是一场超过2000万的消费者在Lazada网站上及APP上浏览和疯狂抢购的盛会。 Lazada是东南亚最大B2C平台&#xff0c;业务范围覆盖印度尼西亚、马来西亚、菲律宾、新加坡、泰国和越南六个东南亚国…

AI行业真实现状:做芯片没工作,做视觉、语音血赚

最近&#xff0c;深圳前瞻产品研究院发布了《2019年人工智能行业现状和发展趋势报告》&#xff0c;笔者看过之后&#xff0c;感觉真是用了心&#xff0c;这不仅是一份数据报告&#xff0c;更像一本“扫盲手册”。众人皆知&#xff0c;AI血赚&#xff0c;当我们谈人工智能&#…

JSON数据从OSS迁移到MaxCompute最佳实践

本文为您介绍如何利用DataWorks数据集成将JSON数据从OSS迁移到MaxCompute&#xff0c;并使用MaxCompute内置字符串函数GET_JSON_OBJECT提取JSON信息。 数据上传OSS 将您的JSON文件重命名后缀为TXT文件&#xff0c;并上传到OSS。本文中使用的JSON文件示例如下。 {"store&…

在MaxCompute上分析IP来源的方法

淘宝IP库 淘宝IP地址库官网地址http://ip.taobao.com/&#xff0c;其查询接口[http://ip.taobao.com/service/getIpInfo.php?ip[ip地址字串]](http://ip.taobao.com/service/getIpInfo.php?ip[ip地址字串])&#xff0c;如下所示&#xff1a; 但是在MaxCompute中禁止使用http…

egg直接取req_Egg服务器基础功能

1. 框架约定目录规则1.1 app/router.js&#xff1a;用于配置URL路由规则&#xff1b;1.2 app/controller/** &#xff1a;用于解析用户的输入&#xff0c;处理后返回相应的结果&#xff1b;1.3 app/service/**&#xff1a; 用于编写业务逻辑层&#xff1b;1.4 app/public/**&am…

我和 Spring 大神的一天

先介绍一下故事的5位主人公。 Josh Long 龙之春&#xff1a; Spring 技术布道师&#xff0c;撰写过5部著作&#xff0c;录制过3部畅销的培训视频&#xff0c;是一位开源软件贡献者。 Spencer Gibb&#xff1a; Spring 技术布道师&#xff0c;Spring Cloud核心项目的联合创始人…

Android开发中解决自定义弹窗获取不到控件对象的问题

最近做期末作业的时候遇到一个功能需要在弹窗里修改账号密码&#xff0c;弹窗里面含有两个edittext控件&#xff0c;经过查阅资料我通过setView添加了一个view在弹窗里实现了&#xff0c;但是获取的控件对象一直为空导致我取不到输入的值&#xff0c;找了好久的错误原来获取对象…