mongdb mysql geospatial 比较_MongoDB的地理位置查询,以及和mysql的使用对比
MongoDB的一个特色就是具有丰富的查询接口,比如地理位置查询。
在地理位置查询上,MongoDB有着比传统关系型数据库的优势,下面举个例子。
当前移动互联网应用,按用户离目标门店距离排序上的场景很多。
比如:
一张门店表shop_list,表结构字段包括shop_id,shop_name,lng,lat (门店id,门店名称,以及门店的经纬度等)。
现收集到当前用户的所处位置的经纬度是,经度116.30759,纬度40.05748。获取距离用户1000m以内的100家门店,按照距离从近到远排序。
MySql的查询语句如下:
SELECT shop_id,shop_name,lng,lat, ROUND(6378.138*2*ASIN(SQRT(POW(SIN((40.05748*PI()/180-lat*PI()/180)/2),2)+COS(40.05748*PI()/180)*COS(lat*PI()/180)*POW(SIN((116.30759*PI()/180-lng*PI()/180)/2),2)))*1000) ASdistanceFROMshop_listHAVING distance < 1000
ORDER BY distance LIMIT 100;
一个这样的计算方法,显然mysql性能比较差。
下面的这个计算方法更快一些,效果和上面的几乎差不多,只是距离distance并不真实。如果只想按照距离排序查出结果是没问题的。
SELECTshop_id ,
shop_name ,
lng ,
lat ,POWER(lat - 40.05748 , 2) + POWER(lng - 116.30759 , 2) * POWER(COS((lat + 40.05748) / 2) , 2) ASdistanceFROMshop_listHAVINGdistance< 1000
ORDER BYdistance
LIMIT100;
换做MongoDB会如何呢?
首先,要明确MongoDB在使用距离查询时,存储的经纬度结构要类似这样才可以:
'point' : [116.299,
40.053]或者:'point': {'lng' : 116.299,'lat' : 40.053}
然后给经纬度的point做一个2dSphere索引。具体参考官方文档:
db.shop_list.createIndex({"point":"2dsphere"})
第三个用法可以得出距离值:
#这个点的附近
db.shop_list.find({'point':{$nearSphere: [116.30759, 40.05748]}})
#这个点的附近1000米
db.shop_list.find({point: { $geoWithin: { $centerSphere:[[ 116.30759, 40.05748], 1000/6378137] } } })
#这个点的附近1000米的10个门店,并且有距离计算值
db.runCommand({ geoNear : "shop_list" , near :[116.30759, 40.05748], num : 10 , spherical:true, distanceMultiplier: 6378137, maxDistance:1000/6378137})
mongdb mysql geospatial 比较_MongoDB的地理位置查询,以及和mysql的使用对比相关推荐
- 【MySQL】面试官:如何查询和删除MySQL中重复的记录?
写在前面 最近,有小伙伴出去面试,面试官问了这样的一个问题:如何查询和删除MySQL中重复的记录?相信对于这样一个问题,有不少小伙伴会一脸茫然.那么,我们如何来完美的回答这个问题呢?今天,我们就一起来 ...
- mysql对结果限制_在查询中限制MySQL结果
我正在寻找是否可以通过一个查询获得所需的结果,而我的MySQL技能仍处于青春期. 我有4张桌子:表演,艺术家,场地和游览.现在,我的主查询的简化版本如下所示: SELECT * FROM artist ...
- servlet mysql 分页_Java基础94 分页查询(以MySQL数据库为例,Servlet技术)
1.概述 分页查询,也可叫做分批查询,基于数据库的分页语句(不同数据库是不同的). 本文使用的事MySql数据库. 假设:每页显示10条数据. Select * from contact limit ...
- Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合
Elasticsearch(三)--Es搜索(简单使用.全文查询.复合查询).地理位置查询.特殊查询.聚合操作.桶聚合.管道聚合 一.Es搜索 这里的 Es 数据博主自己上网找的,为了练习 Es 搜索 ...
- 详解基于MongoDB的地理位置查询,结合Symfony2演示
简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是S ...
- 七(7)探花功能-MongoDB地理位置查询-附近的人
课程总结 1.探花功能 业务需求 执行过程 2.MongoDB的地理位置查询 地理位置查询的应用场景 查询案例 3.搜附近 上报地理位置 使用MongoDB搜索附近 一. 探花左划右滑 探花功能是将推 ...
- mysql geo_地理位置geo处理之mysql函数的详细介绍(附代码)
本篇文章给大家带来的内容是关于地理位置geo处理之mysql函数的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 目前越来越多的业务都会基于LBS,附近的人,外卖位 ...
- mysql geo 函数_【后端开发】地理位置geo处理之mysql函数的详细介绍(附代码)
本篇文章给大家带来的内容是关于地理位置geo处理之mysql函数的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 目前越来越多的业务都会基于LBS,附近的人,外卖位 ...
- mysql 慢日志 作用_MySQL慢查询日志的作用和开启
前言 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中.lon ...
最新文章
- mysql多列索引不全用,MySQL多列索引的生效规则
- SQL Server 2008 R2 安全性专题(一):安全原则
- java.net.SocketException四大异常解决方案
- python安装教程mac-Mac 安装python 3.*新版本的详细步骤
- UIApplication shared application用法总结
- 在panel中显示一个新的form
- python画海绵宝宝_脑洞大开的万圣节,10招带你和宝宝花式玩南瓜
- QT操作sqlite概念
- typeof 和instanceof
- jquery 随楼层滚动导航激活状态改变特效
- Color the ball(树状数组区间更新+单点求值)
- 2020icpc赛事安排
- U盘分区,一盘两用,分为启动盘和读写盘
- GEO TCGA公共数据挖掘培训
- HTML页面可视化快速设计
- 服务器匹配原理,王者荣耀实现原理学习笔记
- 四信5G工业智能网关加速5G全连接智慧工厂落地 抢占生产“智”高点
- python基础包的functools的reduce方法-亢保星
- 咖说 | TON 项目宣告终止!但社区还将继续进行开发和发币
- Ubuntu18.04安装opencv和opencv_contrib
热门文章
- sql开启mysql远程连接_CentOS系统中安装MySQL和开启MySQL远程访问的方法
- python自动化框架2019_【转】python3实现自动化框架robotframework
- python selenium爬虫_详解基于python +Selenium的爬虫
- 比0 冷1度c语言编程,关于DS18B20的C语言程序(精确度0.1度).doc
- 20220209-CTF MISC-BUUCTF-qr-被嗅探的流量(查找POST包)
- /etc/ssh/sshd_config 关建字:PermitRootLogin no 禁示以root身份登录服务器
- Linux CentOS 6.5 + Apache + Mariadb + PHP环境搭建
- 《Delphi XE6 android 编程入门教程》推荐
- Jetty架构解析及应用示例
- C#操作注册表增删改查及关机能保存问题