- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
借助OTS快速构建LBS服务
借助OTS快速构建LBS服务
俗话说“民以食为天”,结束一天繁忙的工作,三五好友一聚,找个饭馆搓一顿,早已成为人们日常生活的一部分。随着移动互联网的兴起,随时随地使用LBS服务查找餐馆信息逐渐成为一种趋势,也为创业者提供了巨大的商机。本文将介绍如何基于阿里云的开放结构化数据服务(Open Table Service,以下简称OTS)快速构建查找餐馆信息的LBS服务的数据管理系统。
如何成为OTS的应用开发者
开发者首先要在OTS官方网站上注册一个账户,然后从OTS管理中心页面的API密钥管理选项卡中获取AccessId和AccessKey安全加密对,注意:任何与OTS服务的交互操作必须携带AccessId。OTS通过这一加密对进行身份验证,从而保证开发者的数据不能被别人访问,因此开发者务必小心保管AccessKey,不要对任何人泄露。
OTS提供的所有功能都可以通过Restful API来访问,但为了提高开发效率,我们为开发者提供了Python SDK。本文的例子就是使用Python SDK进行构建的。OTS SDK及文档可以从OTS官方网站下载。
三步构建一个LBS服务的数据管理系统
互联网应用的开发通常采用循环迭代的方式进行,下面我们通过从简单到复杂的三步,来构建一个餐馆查询的LBS服务,该LBS服务的完整代码可以从/ots_sdk/samples/restaurant_lbs.py下载。
餐馆基本信息查询
餐馆基本信息查询的流程一般是:移动设备上的客户端软件将用户的位置信息发送到要构建的LBS服务,然后LBS服务返回用户位置附近的餐馆信息供用户浏览。构建这个服务,首先需要收集城市内各个餐馆的基本数据,并存入到OTS表(RestaurantInfo)中供后续访问,表的每一行数据对应到一个餐馆,schema设置如表1所示。
表1 RestaurantInfo表存储餐馆的数据
表1的primary key由DistrictID和RestaurantID这两个字段组成,唯一标识一个餐馆,其中DistrictID为partition key,指定同一区域内的餐馆数据属于同一个数据分片。开发者要注意的是在创建表时不需要指定primary key之外的信息,可以参考以下代码(为简便起见,本文中的代码不考虑异常处理,异常处理请参考OTS开发者指南,网址为/guide/index):
图1 在OTS控制台中查看RestaurantInfo表的schema信息
执行完上述操作之后,系统会在后台执行表加载,这个过程需要1~2分钟。加载成功之后才能往表中写入数据,这一点是需要开发者特别注意的。表创建成功之后,用户可以通过OTS官方网站上的控制台查看RestaurantInfo表的schema信息,如图1所示。
接下来是向表中添加数据。OTS提供了两种添加数据的方式:单条添加和批量添加。批量操作效率高,但有一个约束,即批量操作的行必须拥有相同的partition key。我们的例子采用批量添加方式,每次插入一个区域内的一批餐馆数据(拥有相同的partition key——DistrictID)。下面的代码展示如何插入一批DistrictID为“10000”的餐馆记录:
当有新的餐馆信息需要写入到服务中或者已有餐馆信息需要更新时,可以通过简单的单条写入数据操作(PutData)来执行,这里不再说明。
回到最初的场景——用户希望查找当前位置周围的餐馆。首先LBS服务根据用户的位置信息获取用户附近的餐馆区域ID(例如调用已有的GIS服务),可能会得到一个或者多个餐馆区域ID,LBS服务再根据这些区域ID去RestaurantInfo表中查询区域内的餐馆,针对每一个区域ID调用一次RangeQuery得到这个区域内的所有餐馆。下述代码将查询DistrictID为10000的区域内的前1000条餐馆数据:
在OTS中,我们建议RangeQuery在一个partition key范围内执行。对应到本例子中,就是针对每个区域调用一次RangeQuery。对于返回的每一条餐馆数据,LBS服务会根据用户的位置信息和餐馆的位置信息计算两者之间的距离,并将距离信息随同餐馆的基本信息一起返回并展示在移动终端。至此一个最基本的LBS服务就完成了。
用户评论的发表和查询
在这个LBS服务积累了一定量的人气之后,用户反馈对于服务质量的提高会有很大帮助。于是我们需要增加用户评价功能,允许用户对每个餐馆的用餐体验进行评价和打分,并能查询用户评价。我们通过增加另外一张表(RestaurantComment)来支持这个功能,表的每一行对应用户的一条评价结果,表的schema设置如表2所示。
表2 RestaurantComment表存储用户对餐馆的评价数据
表2的primary ke
文档评论(0)