美团点评沙龙12-LBS空间搜索架构的优化历程

美团点评技术团队
美团点评技术团队美团点评技术团队
LBS空间搜索架构的优化历程  
尹非凡@美团配送  20160925  
2
关于.  我  
2009.01 2011.01 2015.11   现在  
MIM  Software   爱奇艺   新美大  
    
云平台  
  
1:云推送  
2:Passport  
3:爱奇艺泡泡  
技术研发部  
  
1:医疗软件开发  
配送事业部  
  
1:LBS  
2:动态定价  
3:动态预测  
3
目录  
l  关于  .  我  
l  LBS与O2O  
l  主要业务场景  
l  LBS服务演化  
l  MongoDB方案  
l  MySQL+GeoHash方案  
l  Redis+GeoHash方案  
4
LBS与O2O  
LBS  
团购  
打车  
外卖配送  
餐饮   商超  
电影票  
5
配  
送  
系  
统  
如何将用户的订单交给合适的骑手配送?  
主要业务场景  
商家在哪里?  
入驻时确定  
坐标固定  
用户在哪里?  
下单时确定  
坐标固定  
骑手在哪里?  
实时变化  
坐标不固定  
6
主要业务场景  
骑手实时坐标上传  
骑手多,上报QPS高  
峰值QPS:1.5W+  
7
主要业务场景
订单找  
骑手  派单  
推单  
抢单  
人工派单  
订单找  
骑手  
8
主要业务场景  
空间搜索  
订单找骑手   骑手找订单  
9
业内解决方案  
更新索引效率低  
不适合实时更新场景  
GeoHash  
笛卡尔  
层级  
R树  
MongoDB  
  Postgre/PostGIS  
Lucene/Solr/ES  
10
当配送小的时候  –  LBS1.0  
MongoDB
Slave
  
MongoDB  
Slave  
  
  
MongoDB  
Slave  
MongoDB
Master
开发部署简单  
•  原生支持空间索引  
•  实时更新支持较好  
•  开发成本低  
扩展性较好  
•  读写分离  
•  负载均衡  
11
MongoDB  as  LBS  
API接入层  
位置上报服务  
Master  MongoDB   Slave  MongoDB  
派
单  
抢
单  
人
工
派
单  
推
单  
12
MongoDB空间搜索原理  
MongoDB内存过滤、合并  
搜 索 结 果
空间搜索操作
为CPU密集型  
13
MongoDB瓶颈  
读写密集时出现问题  
从服务器CPU负载急剧上升  
查询性能急剧降低  
查询吞吐量大幅降低  
主从复制出现较大的延迟  
原因分析  
每一次LBS查询,会分解成许多次
单独的子查询  
增大查询锁等待概率  
结果合并、内存过滤消耗CPU  
14
优化方案:MongoDB  
库级锁问题  
升级MongoDB(2.8+)  
支持行级锁  
CPU密集问题  
分片  
单库写控制在4000以内  
支持目前的骑手数,至少需要
4个MongoDB实例  
资源浪费严重  
15
优化方案:自研LBS  
GeoHash 存储系统   自研LBS
能否基于GeoHash算法,自己实现一个LBS空间搜索服务?
16
GeoHash  
定义:将一个经纬度信息,转换成一个可排序、可比较的字符串编码;  
技术能力:负责子系统、技术规划、方法论沉淀、部⻔门级影响力;	
  
17
GeoHash  
(116.389550,39.928167)
wx4g0s8q3jf9
降维   前缀包含   邻域相似  
18
GeoHash  
GeoHash原理  
19
GeoHash  
10111 00011 11010 01011
11100 11101 00100 01111
以北海公园为例  
•  经纬度:116.389550,39.928167  
纬度:39.928167     经度:116.389550  
20
LBS2.0  -  存储系统选择  
关系数据库   No-SQL  
GeoHash 存储系统   自研LBS
MySQL   Redis  
21
LBS2.0:  MySQL  +  GeoHash  
API接入层  
LBS  
GeoHash  
Master  MySQL   Slave  MySQL  
派
单  
抢
单  
人
工
派
单  
推
单  
22
LBS2.0:  MySQL  +  GeoHash  
数据库查找   内存过滤  
§   选择合适的GeoHash位数  
§   选择当前坐标的格子以及
周边若干个格子  
§   拼成SQL语句  
§ 内存过滤SQL
语句返回的结
果,刨除不符
合半径限制的
记录  
如何进行空间搜索?  
23
LBS2.0:  MySQL  +  GeoHash  
标准的GeoHash缺陷  
Base32编码,每一个字符代表5个bit位  
wx4g0s8代表面积比Wx4g0s8q大32倍  
GeoHash块可选范围小  
纯二进制的GeoHash字符串缺陷  
字符串太长、浪费空间  
前缀匹配效率低  
60Bit  GeoHash优点  
可选访问宽  
节省存储空间  
搜索效率高  
如何选择合适GeoHash格式?  
24
LBS2.0:  MySQL  +  GeoHash  
Base32格式  
GeoHash  
左对齐转成64
位整形  
右移4位  
列名   字段类型   描述  
bm_user_id   bigint   骑手ID  
bm_user_lat   int   骑手纬度  
bm_user_lng   int   骑手经度  
geohash_long   bigint   60bit  GEOHASH值  
bm_org_id   int   组织ID  
utime   int   上传时间  
25
LBS2.0:  MySQL  +  GeoHash  
方案优点  
研发经验丰富  
运维比较成熟  
方案缺点  
性能存在瓶颈  
扩展困难  
单数据库写压力须控制在2000以内  
仅支持万级别的骑手数  
分库分表方案  
26
LBS2.0:  MySQL  +  GeoHash  
方 案 复 杂
资 源 浪 费
未 予 实 施
分库分表  
•  Sharding  Key:  21Bit  GeoHash值  
•  可表示19.5KM  *  19.5KM的矩形  
•  绝大部分查询可在一个表中完成  
•  极端情况需要查询四个库(表)  
资源评估  
•    写多、读少、数据量少  
•  支撑1.5W上报QPS需分片8个主库  
分库分表方案?  
27
LBS2.0:  Redis  +  GeoHash  
API接入层  
LBS  
GeoHash  
Redis  Cluster  
派
单  
抢
单  
人
工
派
单  
推
单  
28
LBS2.0:  Redis  +  GeoHash  
数据冗余  
如何解决多维度查询问题?  
l  如何查询当前骑手的实时位置?  
l  派单:如何查询一个组织内的所有骑手的实时位置?  
l  众包抢单:如何查询一定范围内的所有骑手?  
•    3公里半径内  
•    多边形范围内  
29
LBS2.0:  Redis  +  GeoHash  
KEY   VALUE  
PREFIX:{riderId}   (lat,  lng,  timestamp,  …)  
KEY   FIELD   VALUE  
PREFIX:
{orgId}  
RiderId   (lat,  lng,  
timestamp,  …)  
KEY-MAP
结构  
KEY   FIELD   VALUE  
PREFIX:
{geohash}  
RiderId   (lat,  lng,  
timestamp,  …)  
l  如何查询当前骑手的实
时位置?  
l  骑手到骑手坐标的映射  
l  如何查询一定范围内所
有骑手?  
l  GeoHash到骑手坐标映射  
l  如何查询组织内骑手实时
位置?  
l  组织到骑手坐标映射  
30
LBS2.0:  Redis  +  GeoHash  
GeoHash位数选择  
27bit,代表的格子大小约为4.5Km2  
每次取9个GeoHash格子,可以过滤出周围3Km范围内所有骑手  
Key-Map大小控制  
hGetAll获取Map所有内容  
Map大小不宜超过1000  
31
LBS2.0:  Redis  +  GeoHash  
骑手在格子间漂移的问题?  
  骑手坐标上传时  
l  取出上一次骑手实时坐标  
l  比较GeoHash格子是否有变化  
•  有变化:删除上一次格子中的信  
l  存储当前骑手经纬对应的GeoHash格子  
每次上传大约操作Redis  3~4次  
32
LBS2.0:  Redis  +  GeoHash  
效果评估  
资源消耗  
l  10GB  Redis主内存  
QPS最高支持  
l  写:10W,是当前峰值流量的6倍  
l  读:20W,是当前峰值流量的16倍  
接口性能  
l  位置上报接口:TP99  约4ms  
l  查询接口:TP99  小于10ms  
技术分享
  
谢谢!  
  
1 of 33

Recommended

Comparing Apache Cassandra 4.0, 3.0, and ScyllaDB by
Comparing Apache Cassandra 4.0, 3.0, and ScyllaDBComparing Apache Cassandra 4.0, 3.0, and ScyllaDB
Comparing Apache Cassandra 4.0, 3.0, and ScyllaDBScyllaDB
811 views50 slides
Delta Lake: Optimizing Merge by
Delta Lake: Optimizing MergeDelta Lake: Optimizing Merge
Delta Lake: Optimizing MergeDatabricks
1.1K views16 slides
From DataFrames to Tungsten: A Peek into Spark's Future-(Reynold Xin, Databri... by
From DataFrames to Tungsten: A Peek into Spark's Future-(Reynold Xin, Databri...From DataFrames to Tungsten: A Peek into Spark's Future-(Reynold Xin, Databri...
From DataFrames to Tungsten: A Peek into Spark's Future-(Reynold Xin, Databri...Spark Summit
5K views27 slides
ROP 輕鬆談 by
ROP 輕鬆談ROP 輕鬆談
ROP 輕鬆談hackstuff
26K views82 slides
Rocks db state store in structured streaming by
Rocks db state store in structured streamingRocks db state store in structured streaming
Rocks db state store in structured streamingBalaji Mohanam
1.4K views12 slides
Advanced heap exploitaion by
Advanced heap exploitaionAdvanced heap exploitaion
Advanced heap exploitaionAngel Boy
27.1K views55 slides

More Related Content

What's hot

Demystifying flink memory allocation and tuning - Roshan Naik, Uber by
Demystifying flink memory allocation and tuning - Roshan Naik, UberDemystifying flink memory allocation and tuning - Roshan Naik, Uber
Demystifying flink memory allocation and tuning - Roshan Naik, UberFlink Forward
3K views14 slides
Develop Your Own Operating System by
Develop Your Own Operating SystemDevelop Your Own Operating System
Develop Your Own Operating SystemNational Cheng Kung University
3.5K views33 slides
Real-time Stream Processing with Apache Flink by
Real-time Stream Processing with Apache FlinkReal-time Stream Processing with Apache Flink
Real-time Stream Processing with Apache FlinkDataWorks Summit
6.1K views25 slides
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥 by
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥Seomgi Han
5.8K views43 slides
Tcache Exploitation by
Tcache ExploitationTcache Exploitation
Tcache ExploitationAngel Boy
2.8K views63 slides
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook by
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of FacebookTech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of FacebookThe Hive
16.7K views101 slides

What's hot(20)

Demystifying flink memory allocation and tuning - Roshan Naik, Uber by Flink Forward
Demystifying flink memory allocation and tuning - Roshan Naik, UberDemystifying flink memory allocation and tuning - Roshan Naik, Uber
Demystifying flink memory allocation and tuning - Roshan Naik, Uber
Flink Forward3K views
Real-time Stream Processing with Apache Flink by DataWorks Summit
Real-time Stream Processing with Apache FlinkReal-time Stream Processing with Apache Flink
Real-time Stream Processing with Apache Flink
DataWorks Summit6.1K views
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥 by Seomgi Han
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
파이콘 한국 2019 - 파이썬으로 서버를 극한까지 끌어다 쓰기: Async I/O의 밑바닥
Seomgi Han5.8K views
Tcache Exploitation by Angel Boy
Tcache ExploitationTcache Exploitation
Tcache Exploitation
Angel Boy2.8K views
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook by The Hive
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of FacebookTech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook
Tech Talk: RocksDB Slides by Dhruba Borthakur & Haobo Xu of Facebook
The Hive16.7K views
Common Strategies for Improving Performance on Your Delta Lakehouse by Databricks
Common Strategies for Improving Performance on Your Delta LakehouseCommon Strategies for Improving Performance on Your Delta Lakehouse
Common Strategies for Improving Performance on Your Delta Lakehouse
Databricks718 views
A Deep Dive Into Understanding Apache Cassandra by DataStax Academy
A Deep Dive Into Understanding Apache CassandraA Deep Dive Into Understanding Apache Cassandra
A Deep Dive Into Understanding Apache Cassandra
DataStax Academy7.1K views
Spark SQL: Another 16x Faster After Tungsten: Spark Summit East talk by Brad ... by Spark Summit
Spark SQL: Another 16x Faster After Tungsten: Spark Summit East talk by Brad ...Spark SQL: Another 16x Faster After Tungsten: Spark Summit East talk by Brad ...
Spark SQL: Another 16x Faster After Tungsten: Spark Summit East talk by Brad ...
Spark Summit3.9K views
Play with FILE Structure - Yet Another Binary Exploit Technique by Angel Boy
Play with FILE Structure - Yet Another Binary Exploit TechniquePlay with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit Technique
Angel Boy38.4K views
Routing In Fat Trees by APNIC
Routing In Fat TreesRouting In Fat Trees
Routing In Fat Trees
APNIC1.2K views
自傳製作 by 文豪 薛
自傳製作自傳製作
自傳製作
文豪 薛794 views
VictoriaLogs: Open Source Log Management System - Preview by VictoriaMetrics
VictoriaLogs: Open Source Log Management System - PreviewVictoriaLogs: Open Source Log Management System - Preview
VictoriaLogs: Open Source Log Management System - Preview
VictoriaMetrics2.9K views
RocksDB detail by MIJIN AN
RocksDB detailRocksDB detail
RocksDB detail
MIJIN AN7.3K views
Kicking ass with redis by Dvir Volk
Kicking ass with redisKicking ass with redis
Kicking ass with redis
Dvir Volk39.1K views
Building a Streaming Microservice Architecture: with Apache Spark Structured ... by Databricks
Building a Streaming Microservice Architecture: with Apache Spark Structured ...Building a Streaming Microservice Architecture: with Apache Spark Structured ...
Building a Streaming Microservice Architecture: with Apache Spark Structured ...
Databricks1.6K views
5 Factors When Selecting a High Performance, Low Latency Database by ScyllaDB
5 Factors When Selecting a High Performance, Low Latency Database5 Factors When Selecting a High Performance, Low Latency Database
5 Factors When Selecting a High Performance, Low Latency Database
ScyllaDB458 views
Operating and Supporting Delta Lake in Production by Databricks
Operating and Supporting Delta Lake in ProductionOperating and Supporting Delta Lake in Production
Operating and Supporting Delta Lake in Production
Databricks333 views

Viewers also liked

美团点评技术沙龙14美团云-Docker平台 by
美团点评技术沙龙14美团云-Docker平台美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙14美团云-Docker平台美团点评技术团队
925 views23 slides
美团点评技术沙龙13-前端工程化开发方案app-proto介绍 by
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术团队
932 views38 slides
美团点评技术沙龙13-点评Titans框架的设计和实践 by
美团点评技术沙龙13-点评Titans框架的设计和实践美团点评技术沙龙13-点评Titans框架的设计和实践
美团点评技术沙龙13-点评Titans框架的设计和实践美团点评技术团队
771 views22 slides
美团点评技术沙龙14:美团四层负载均衡 by
美团点评技术沙龙14:美团四层负载均衡美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡美团点评技术团队
2.3K views37 slides
美团点评沙龙012-初创电商的物流摸索 by
美团点评沙龙012-初创电商的物流摸索美团点评沙龙012-初创电商的物流摸索
美团点评沙龙012-初创电商的物流摸索美团点评技术团队
519 views18 slides
美团点评沙龙012-从零到千万量级的实时物流平台架构实践 by
美团点评沙龙012-从零到千万量级的实时物流平台架构实践美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践美团点评技术团队
989 views36 slides

Viewers also liked(20)

美团点评技术沙龙13-前端工程化开发方案app-proto介绍 by 美团点评技术团队
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评沙龙012-从零到千万量级的实时物流平台架构实践 by 美团点评技术团队
美团点评沙龙012-从零到千万量级的实时物流平台架构实践美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评技术沙龙011 - 团购系统流量和容量评估实践 by 美团点评技术团队
美团点评技术沙龙011 - 团购系统流量和容量评估实践美团点评技术沙龙011 - 团购系统流量和容量评估实践
美团点评技术沙龙011 - 团购系统流量和容量评估实践
美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路 by 美团点评技术团队
美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路
美团点评沙龙 飞行中换引擎--美团配送业务系统的架构演进之路
美团点评技术沙龙011 - 移动app兼容性测试工具Spider by 美团点评技术团队
美团点评技术沙龙011 - 移动app兼容性测试工具Spider 美团点评技术沙龙011 - 移动app兼容性测试工具Spider
美团点评技术沙龙011 - 移动app兼容性测试工具Spider
美团点评技术沙龙010-美团数据库自动化运维系统构建之路 by 美团点评技术团队
美团点评技术沙龙010-美团数据库自动化运维系统构建之路美团点评技术沙龙010-美团数据库自动化运维系统构建之路
美团点评技术沙龙010-美团数据库自动化运维系统构建之路
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化 by 美团点评技术团队
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化
美团点评技术沙龙09 - 美团外卖中的单量预估及列表优化

Similar to 美团点评沙龙12-LBS空间搜索架构的优化历程

20170823【GWゼミ #2】コンピュータビジョンの基礎 by
20170823【GWゼミ #2】コンピュータビジョンの基礎20170823【GWゼミ #2】コンピュータビジョンの基礎
20170823【GWゼミ #2】コンピュータビジョンの基礎Mirai Higuchi
1.5K views80 slides
MashupAward7 Microsoft Presentation by
MashupAward7 Microsoft PresentationMashupAward7 Microsoft Presentation
MashupAward7 Microsoft PresentationShinichiro Isago
916 views31 slides
JAWS-UG CLI #22 Amazon Kinesis by
JAWS-UG CLI #22 Amazon KinesisJAWS-UG CLI #22 Amazon Kinesis
JAWS-UG CLI #22 Amazon KinesisDaisuke Nagao
1.9K views26 slides
IoTで働き方改革(Db2でJSON) by
IoTで働き方改革(Db2でJSON)IoTで働き方改革(Db2でJSON)
IoTで働き方改革(Db2でJSON)Natsumi Yotsumoto
261 views14 slides
Blockchain EXE #16:Hyperledger fabricの技術動向とファイナンシャルエンジニアリング視点でのトークンエコノミー|平山 毅... by
Blockchain EXE #16:Hyperledger fabricの技術動向とファイナンシャルエンジニアリング視点でのトークンエコノミー|平山 毅...Blockchain EXE #16:Hyperledger fabricの技術動向とファイナンシャルエンジニアリング視点でのトークンエコノミー|平山 毅...
Blockchain EXE #16:Hyperledger fabricの技術動向とファイナンシャルエンジニアリング視点でのトークンエコノミー|平山 毅...blockchainexe
1.3K views30 slides
Mashup Award 7 Caravan in Fukuoka by
Mashup Award 7 Caravan in FukuokaMashup Award 7 Caravan in Fukuoka
Mashup Award 7 Caravan in FukuokaKazumi Hirose
607 views35 slides

Similar to 美团点评沙龙12-LBS空间搜索架构的优化历程(20)

20170823【GWゼミ #2】コンピュータビジョンの基礎 by Mirai Higuchi
20170823【GWゼミ #2】コンピュータビジョンの基礎20170823【GWゼミ #2】コンピュータビジョンの基礎
20170823【GWゼミ #2】コンピュータビジョンの基礎
Mirai Higuchi1.5K views
JAWS-UG CLI #22 Amazon Kinesis by Daisuke Nagao
JAWS-UG CLI #22 Amazon KinesisJAWS-UG CLI #22 Amazon Kinesis
JAWS-UG CLI #22 Amazon Kinesis
Daisuke Nagao1.9K views
Blockchain EXE #16:Hyperledger fabricの技術動向とファイナンシャルエンジニアリング視点でのトークンエコノミー|平山 毅... by blockchainexe
Blockchain EXE #16:Hyperledger fabricの技術動向とファイナンシャルエンジニアリング視点でのトークンエコノミー|平山 毅...Blockchain EXE #16:Hyperledger fabricの技術動向とファイナンシャルエンジニアリング視点でのトークンエコノミー|平山 毅...
Blockchain EXE #16:Hyperledger fabricの技術動向とファイナンシャルエンジニアリング視点でのトークンエコノミー|平山 毅...
blockchainexe1.3K views
Mashup Award 7 Caravan in Fukuoka by Kazumi Hirose
Mashup Award 7 Caravan in FukuokaMashup Award 7 Caravan in Fukuoka
Mashup Award 7 Caravan in Fukuoka
Kazumi Hirose607 views
クラウドとは何か / what is cloud computing (1.4 / 2017.07) by Arichika TANIGUCHI
クラウドとは何か / what is cloud computing (1.4 / 2017.07)クラウドとは何か / what is cloud computing (1.4 / 2017.07)
クラウドとは何か / what is cloud computing (1.4 / 2017.07)
デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~ by Developers Summit
デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~
デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~
Developers Summit3.5K views
ゲームインフラと解析基盤 そのものの考え方を変えるAWS by Yasuhiro Horiuchi
ゲームインフラと解析基盤 そのものの考え方を変えるAWSゲームインフラと解析基盤 そのものの考え方を変えるAWS
ゲームインフラと解析基盤 そのものの考え方を変えるAWS
Yasuhiro Horiuchi11.3K views
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化 by SORACOM,INC
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM,INC2.3K views
MongoDB概要:金融業界でのMongoDB by ippei_suzuki
MongoDB概要:金融業界でのMongoDBMongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDB
ippei_suzuki4.7K views
Hadoop Conference Japan 2011 Fall: マーケティング向け大規模ログ解析事例紹介 by Kenji Hara
Hadoop Conference Japan 2011 Fall: マーケティング向け大規模ログ解析事例紹介Hadoop Conference Japan 2011 Fall: マーケティング向け大規模ログ解析事例紹介
Hadoop Conference Japan 2011 Fall: マーケティング向け大規模ログ解析事例紹介
Kenji Hara1.1K views
認証/認可が実現する安全で高速分析可能な分析処理基盤 by Masahiro Kiura
認証/認可が実現する安全で高速分析可能な分析処理基盤認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤
Masahiro Kiura7.3K views
ビジネスプランの提案 by Mizuki Sakai
ビジネスプランの提案ビジネスプランの提案
ビジネスプランの提案
Mizuki Sakai1.5K views
5月中旬の仮想通貨Re-orgについて by Masanori Kusunoki
5月中旬の仮想通貨Re-orgについて5月中旬の仮想通貨Re-orgについて
5月中旬の仮想通貨Re-orgについて
Masanori Kusunoki5.1K views
何を基準に選定すべきなのか!? 〜ビッグデータ×IoT×AI時代のデータベースのアーキテクチャとメカニズムの比較〜 by griddb
何を基準に選定すべきなのか!? 〜ビッグデータ×IoT×AI時代のデータベースのアーキテクチャとメカニズムの比較〜何を基準に選定すべきなのか!? 〜ビッグデータ×IoT×AI時代のデータベースのアーキテクチャとメカニズムの比較〜
何を基準に選定すべきなのか!? 〜ビッグデータ×IoT×AI時代のデータベースのアーキテクチャとメカニズムの比較〜
griddb79 views

More from 美团点评技术团队

美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现 by
美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现
美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现美团点评技术团队
640 views50 slides
美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统 by
美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统
美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统美团点评技术团队
1.6K views29 slides
2.美团点评技术沙龙08 微服务是银弹么 by
2.美团点评技术沙龙08   微服务是银弹么2.美团点评技术沙龙08   微服务是银弹么
2.美团点评技术沙龙08 微服务是银弹么美团点评技术团队
615 views13 slides
美团点评技术沙龙08 - 分布式监控系统实践 by
美团点评技术沙龙08 - 分布式监控系统实践美团点评技术沙龙08 - 分布式监控系统实践
美团点评技术沙龙08 - 分布式监控系统实践美团点评技术团队
823 views44 slides
美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践 by
美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践
美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践美团点评技术团队
1.2K views32 slides
美团点评技术沙龙07 - 外卖后端端技术架构 by
美团点评技术沙龙07 - 外卖后端端技术架构美团点评技术沙龙07 - 外卖后端端技术架构
美团点评技术沙龙07 - 外卖后端端技术架构美团点评技术团队
1.4K views21 slides

More from 美团点评技术团队(11)

美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现 by 美团点评技术团队
美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现
美团点评技术沙龙09 - 一个用户行为分析产品的设计与实现
美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统 by 美团点评技术团队
美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统
美团点评技术沙龙08 - 分布式服务通信框架及服务治理系统
美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践 by 美团点评技术团队
美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践
美团点评技术沙龙08 - 分布式会话跟踪系统架构设计与实践
美团点评技术沙龙07 - 外卖订单系统架构演进与实践 by 美团点评技术团队
美团点评技术沙龙07 - 外卖订单系统架构演进与实践美团点评技术沙龙07 - 外卖订单系统架构演进与实践
美团点评技术沙龙07 - 外卖订单系统架构演进与实践
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践 by 美团点评技术团队
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践美团点评技术沙龙07 - 大众点评支付渠道网关系统实践
美团点评技术沙龙07 - 大众点评支付渠道网关系统实践
美团点评技术沙龙06 - 美团外卖全链路性能测试实践 by 美团点评技术团队
美团点评技术沙龙06 - 美团外卖全链路性能测试实践美团点评技术沙龙06 - 美团外卖全链路性能测试实践
美团点评技术沙龙06 - 美团外卖全链路性能测试实践
美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践 by 美团点评技术团队
美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践
美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践

Recently uploaded

ウォーターフォール開発で生 産性を測る指標 by
ウォーターフォール開発で生 産性を測る指標ウォーターフォール開発で生 産性を測る指標
ウォーターフォール開発で生 産性を測る指標Kouhei Aoyagi
62 views13 slides
システム概要.pdf by
システム概要.pdfシステム概要.pdf
システム概要.pdfTaira Shimizu
44 views1 slide
こんな私がアクセシビリティ? 〜入り口に立ってモノの見方が広がった話〜.pdf by
こんな私がアクセシビリティ? 〜入り口に立ってモノの見方が広がった話〜.pdfこんな私がアクセシビリティ? 〜入り口に立ってモノの見方が広がった話〜.pdf
こんな私がアクセシビリティ? 〜入り口に立ってモノの見方が広がった話〜.pdfkenshirofujita
10 views12 slides
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私修治 松浦
213 views36 slides
概要.pdf by
概要.pdf概要.pdf
概要.pdfTaira Shimizu
6 views1 slide
onewedge_companyguide1 by
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1ONEWEDGE1
89 views22 slides

Recently uploaded(6)

ウォーターフォール開発で生 産性を測る指標 by Kouhei Aoyagi
ウォーターフォール開発で生 産性を測る指標ウォーターフォール開発で生 産性を測る指標
ウォーターフォール開発で生 産性を測る指標
Kouhei Aoyagi62 views
こんな私がアクセシビリティ? 〜入り口に立ってモノの見方が広がった話〜.pdf by kenshirofujita
こんな私がアクセシビリティ? 〜入り口に立ってモノの見方が広がった話〜.pdfこんな私がアクセシビリティ? 〜入り口に立ってモノの見方が広がった話〜.pdf
こんな私がアクセシビリティ? 〜入り口に立ってモノの見方が広がった話〜.pdf
kenshirofujita10 views
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by 修治 松浦
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦213 views
onewedge_companyguide1 by ONEWEDGE1
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1
ONEWEDGE189 views

美团点评沙龙12-LBS空间搜索架构的优化历程

  • 2. 2 关于.  我   2009.01 2011.01 2015.11   现在   MIM  Software   爱奇艺   新美大       云平台     1:云推送   2:Passport   3:爱奇艺泡泡   技术研发部     1:医疗软件开发   配送事业部     1:LBS   2:动态定价   3:动态预测  
  • 3. 3 目录   l  关于  .  我   l  LBS与O2O   l  主要业务场景   l  LBS服务演化   l  MongoDB方案   l  MySQL+GeoHash方案   l  Redis+GeoHash方案  
  • 4. 4 LBS与O2O   LBS   团购   打车   外卖配送   餐饮   商超   电影票  
  • 5. 5 配   送   系   统   如何将用户的订单交给合适的骑手配送?   主要业务场景   商家在哪里?   入驻时确定   坐标固定   用户在哪里?   下单时确定   坐标固定   骑手在哪里?   实时变化   坐标不固定  
  • 7. 7 主要业务场景 订单找   骑手  派单   推单   抢单   人工派单   订单找   骑手  
  • 9. 9 业内解决方案   更新索引效率低   不适合实时更新场景   GeoHash   笛卡尔   层级   R树   MongoDB    Postgre/PostGIS   Lucene/Solr/ES  
  • 10. 10 当配送小的时候  –  LBS1.0   MongoDB Slave   MongoDB   Slave       MongoDB   Slave   MongoDB Master 开发部署简单   •  原生支持空间索引   •  实时更新支持较好   •  开发成本低   扩展性较好   •  读写分离   •  负载均衡  
  • 11. 11 MongoDB  as  LBS   API接入层   位置上报服务   Master  MongoDB   Slave  MongoDB   派 单   抢 单   人 工 派 单   推 单  
  • 12. 12 MongoDB空间搜索原理   MongoDB内存过滤、合并   搜 索 结 果 空间搜索操作 为CPU密集型  
  • 13. 13 MongoDB瓶颈   读写密集时出现问题   从服务器CPU负载急剧上升   查询性能急剧降低   查询吞吐量大幅降低   主从复制出现较大的延迟   原因分析   每一次LBS查询,会分解成许多次 单独的子查询   增大查询锁等待概率   结果合并、内存过滤消耗CPU  
  • 14. 14 优化方案:MongoDB   库级锁问题   升级MongoDB(2.8+)   支持行级锁   CPU密集问题   分片   单库写控制在4000以内   支持目前的骑手数,至少需要 4个MongoDB实例   资源浪费严重  
  • 15. 15 优化方案:自研LBS   GeoHash 存储系统   自研LBS 能否基于GeoHash算法,自己实现一个LBS空间搜索服务?
  • 19. 19 GeoHash   10111 00011 11010 01011 11100 11101 00100 01111 以北海公园为例   •  经纬度:116.389550,39.928167   纬度:39.928167     经度:116.389550  
  • 20. 20 LBS2.0  -  存储系统选择   关系数据库   No-SQL   GeoHash 存储系统   自研LBS MySQL   Redis  
  • 21. 21 LBS2.0:  MySQL  +  GeoHash   API接入层   LBS   GeoHash   Master  MySQL   Slave  MySQL   派 单   抢 单   人 工 派 单   推 单  
  • 22. 22 LBS2.0:  MySQL  +  GeoHash   数据库查找   内存过滤   §   选择合适的GeoHash位数   §   选择当前坐标的格子以及 周边若干个格子   §   拼成SQL语句   § 内存过滤SQL 语句返回的结 果,刨除不符 合半径限制的 记录   如何进行空间搜索?  
  • 23. 23 LBS2.0:  MySQL  +  GeoHash   标准的GeoHash缺陷   Base32编码,每一个字符代表5个bit位   wx4g0s8代表面积比Wx4g0s8q大32倍   GeoHash块可选范围小   纯二进制的GeoHash字符串缺陷   字符串太长、浪费空间   前缀匹配效率低   60Bit  GeoHash优点   可选访问宽   节省存储空间   搜索效率高   如何选择合适GeoHash格式?  
  • 24. 24 LBS2.0:  MySQL  +  GeoHash   Base32格式   GeoHash   左对齐转成64 位整形   右移4位   列名   字段类型   描述   bm_user_id   bigint   骑手ID   bm_user_lat   int   骑手纬度   bm_user_lng   int   骑手经度   geohash_long   bigint   60bit  GEOHASH值   bm_org_id   int   组织ID   utime   int   上传时间  
  • 25. 25 LBS2.0:  MySQL  +  GeoHash   方案优点   研发经验丰富   运维比较成熟   方案缺点   性能存在瓶颈   扩展困难   单数据库写压力须控制在2000以内   仅支持万级别的骑手数   分库分表方案  
  • 26. 26 LBS2.0:  MySQL  +  GeoHash   方 案 复 杂 资 源 浪 费 未 予 实 施 分库分表   •  Sharding  Key:  21Bit  GeoHash值   •  可表示19.5KM  *  19.5KM的矩形   •  绝大部分查询可在一个表中完成   •  极端情况需要查询四个库(表)   资源评估   •   写多、读少、数据量少   •  支撑1.5W上报QPS需分片8个主库   分库分表方案?  
  • 27. 27 LBS2.0:  Redis  +  GeoHash   API接入层   LBS   GeoHash   Redis  Cluster   派 单   抢 单   人 工 派 单   推 单  
  • 28. 28 LBS2.0:  Redis  +  GeoHash   数据冗余   如何解决多维度查询问题?   l  如何查询当前骑手的实时位置?   l  派单:如何查询一个组织内的所有骑手的实时位置?   l  众包抢单:如何查询一定范围内的所有骑手?   •   3公里半径内   •   多边形范围内  
  • 29. 29 LBS2.0:  Redis  +  GeoHash   KEY   VALUE   PREFIX:{riderId}   (lat,  lng,  timestamp,  …)   KEY   FIELD   VALUE   PREFIX: {orgId}   RiderId   (lat,  lng,   timestamp,  …)   KEY-MAP 结构   KEY   FIELD   VALUE   PREFIX: {geohash}   RiderId   (lat,  lng,   timestamp,  …)   l  如何查询当前骑手的实 时位置?   l  骑手到骑手坐标的映射   l  如何查询一定范围内所 有骑手?   l  GeoHash到骑手坐标映射   l  如何查询组织内骑手实时 位置?   l  组织到骑手坐标映射  
  • 30. 30 LBS2.0:  Redis  +  GeoHash   GeoHash位数选择   27bit,代表的格子大小约为4.5Km2   每次取9个GeoHash格子,可以过滤出周围3Km范围内所有骑手   Key-Map大小控制   hGetAll获取Map所有内容   Map大小不宜超过1000  
  • 31. 31 LBS2.0:  Redis  +  GeoHash   骑手在格子间漂移的问题?    骑手坐标上传时   l  取出上一次骑手实时坐标   l  比较GeoHash格子是否有变化   •  有变化:删除上一次格子中的信   l  存储当前骑手经纬对应的GeoHash格子   每次上传大约操作Redis  3~4次  
  • 32. 32 LBS2.0:  Redis  +  GeoHash   效果评估   资源消耗   l  10GB  Redis主内存   QPS最高支持   l  写:10W,是当前峰值流量的6倍   l  读:20W,是当前峰值流量的16倍   接口性能   l  位置上报接口:TP99  约4ms   l  查询接口:TP99  小于10ms