地理位置处理---Redis的GeoHash和MySQL的geography类型(之后有空再详细介绍)
地理位置处理—Redis的GeoHash和MySQL的geography类型(之后有空再详细介绍)
最近比较忙,本来很早就想写对比文章了,这里先大致写写,等之后有空再详细介绍吧。这个文章我本地MD笔记也有,以后再上传到github。
1. MySQL的geography
- 适合查找某个指定范围内的物体(比如一个多边形内的)
- 适合需较高精确位置关系的场景。比如传来一个用户坐标,如果需要较精确的定位,来确定用户是否在A区域还是B区域,可以用这个。
- geography往往伴随着函数计算传入的点Point位置是否在某个区域Polygon内,这个据需要数据库函数。因为走函数等于每一行都需要计算,所以是不走索引的,需要全表查找,效率就很低。设置空间索引Spatial index,可以加速这一过程(具体原理没细究,有兴趣可以自己去查一查)。
前面提到函数操作,不走索引。可以了解下virtual column,虚拟列。
过去把函数操作的值另外存一列,比如插入时间,需要另外存个时间戳版本,可以数据库写个触发器,插入时制动转化然后存到新列里面。但是这样麻烦又低效。可以新建一列,设置为虚拟列,其值是函数计算结果,这样插入数据时虚拟列的值会自动计算,而且由于虚拟列直接存在数据字典而不是持久化到磁盘,效率很高(类似于函数索引了)。
2. Redis的GeoHash
- 适合只简单获取某二维点周围范围情况。比如当前位置周围有多少用户在线。
- 适合精度低的场景。这个和GeoHash的算法有关,其本身是把地图二维化,把地图一直切两刀分成4块。具体的块状大小,和传入的经度、维度的有效位数有关。详细算法那些这里不讲,有兴趣可以到我github的DB笔记看看一些网络文章的讲解。
3. 两者对比
下面对比,指的是实现的方式不复杂的情况。
位置关系精度:MySQL的geography > Redis的GeoHash
实现难易度: MySQL的geography > Redis的GeoHash
如果只是获取某点周围大致情况,效率:MySQL的geography < Redis的GeoHash
最好根据自己实际场景使用对应的技术,不是什么难用什么就对。
地理位置处理---Redis的GeoHash和MySQL的geography类型(之后有空再详细介绍)相关推荐
- oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...
本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...
- mysql介绍索引类型的章节_mysql索引总结--mysql索引类型以及创建的详细介绍
关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...
- innodb和my查询速度_吃透MySQL:MyISAM和InnoDB存储引擎详细介绍
一,MySQL基本架构 MySQL基础架构可以分为两大类:Server层和存储引擎层. Server层: Server层涵盖了MySQL大部分核心业务功能,并且所有存储引擎的功能都在这一层实现. 存储 ...
- mysql适配器_MySQL适配器之PyMySQL的详细介绍
这篇文章主要为大家详细介绍了MySQL适配器PyMySQL的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单 ...
- upupw mysql数据库路径_Nginx版UPUPW控制面板详细介绍
UPUPW Nginx版PHP环境控制面板分为核心功能区.检测备份区.启动关闭区三大块,要启用某个功能只要输入相应功能左边的字符按回车键即可. 核心功能区: 1-添加虚拟主机 即除了默认的主机以外,设 ...
- mysql rbo cbo_Oracle的RBO和CBO详细介绍和优化模式设置方法
Oracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CB ...
- 吃透Redis系列(五):RDB和AOF持久化详细介绍
Redis系列文章: 吃透Redis系列(一):Linux下Redis安装 吃透Redis系列(二):Redis六大数据类型详细用法 吃透Redis系列(三):Redis管道,发布/订阅,事物,过期时 ...
- php mysql 字段自增_MySQL自增字段取值的详细介绍(附代码)
本篇文章给大家带来的内容是关于MySQL自增字段取值的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1 前言 本文来自回答思否网友的一个问题,这个网友新建了一张表 ...
- 吃透Redis系列(九):Redis代理twemproxy和predixy详细介绍
Redis系列文章: 吃透Redis系列(一):Linux下Redis安装 吃透Redis系列(二):Redis六大数据类型详细用法 吃透Redis系列(三):Redis管道,发布/订阅,事物,过期时 ...
最新文章
- 关于SysinternalsSuite全部工具【详解】
- java原生方法,Java Servlet原生调用方法过程简化
- 最全Java面试208题,涵盖大厂必考范围!强烈建议收藏~
- Electron使用时拦截HTTP请求的解决方案
- For循环执行顺序流程
- 深入理解JavaScript的设计模式
- perl语言入门(小骆驼)学习(一)
- Notepad++无法修改中文解决办法
- 小米路由器4a开发版固件_发现篇免拆刷小米路由器4a千兆版刷第三方固件的贴子!...
- 入夏短裤热 教你怎么穿
- 这些优秀的音视频开源框架你值得收藏
- 国产rtos系统RT-Thread基础学习总结
- 【修真院pm小课堂】登录注册的触发场景
- python根据json数据画疫情分布地图
- 好看的多级菜单html,jQuery实现美观的多级动画效果菜单代码
- 【翻页电子书制作软件】名编辑电子杂志大师教程 | 添加flash动画
- docker 在线安装
- 鹫峰-阳台山-凤凰岭一日穿越之路线图
- 考试周如何从零基础逆袭到满绩?
- 微积分----极限(一)