地理位置处理—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. 两者对比

下面对比,指的是实现的方式不复杂的情况。

  1. 位置关系精度:MySQL的geography > Redis的GeoHash

  2. 实现难易度: MySQL的geography > Redis的GeoHash

  3. 如果只是获取某点周围大致情况,效率:MySQL的geography < Redis的GeoHash

最好根据自己实际场景使用对应的技术,不是什么难用什么就对。

地理位置处理---Redis的GeoHash和MySQL的geography类型(之后有空再详细介绍)相关推荐

  1. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  2. mysql介绍索引类型的章节_mysql索引总结--mysql索引类型以及创建的详细介绍

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  3. innodb和my查询速度_吃透MySQL:MyISAM和InnoDB存储引擎详细介绍

    一,MySQL基本架构 MySQL基础架构可以分为两大类:Server层和存储引擎层. Server层: Server层涵盖了MySQL大部分核心业务功能,并且所有存储引擎的功能都在这一层实现. 存储 ...

  4. mysql适配器_MySQL适配器之PyMySQL的详细介绍

    这篇文章主要为大家详细介绍了MySQL适配器PyMySQL的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单 ...

  5. upupw mysql数据库路径_Nginx版UPUPW控制面板详细介绍

    UPUPW Nginx版PHP环境控制面板分为核心功能区.检测备份区.启动关闭区三大块,要启用某个功能只要输入相应功能左边的字符按回车键即可. 核心功能区: 1-添加虚拟主机 即除了默认的主机以外,设 ...

  6. mysql rbo cbo_Oracle的RBO和CBO详细介绍和优化模式设置方法

    Oracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CB ...

  7. 吃透Redis系列(五):RDB和AOF持久化详细介绍

    Redis系列文章: 吃透Redis系列(一):Linux下Redis安装 吃透Redis系列(二):Redis六大数据类型详细用法 吃透Redis系列(三):Redis管道,发布/订阅,事物,过期时 ...

  8. php mysql 字段自增_MySQL自增字段取值的详细介绍(附代码)

    本篇文章给大家带来的内容是关于MySQL自增字段取值的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1 前言 本文来自回答思否网友的一个问题,这个网友新建了一张表 ...

  9. 吃透Redis系列(九):Redis代理twemproxy和predixy详细介绍

    Redis系列文章: 吃透Redis系列(一):Linux下Redis安装 吃透Redis系列(二):Redis六大数据类型详细用法 吃透Redis系列(三):Redis管道,发布/订阅,事物,过期时 ...

最新文章

  1. 关于SysinternalsSuite全部工具【详解】
  2. java原生方法,Java Servlet原生调用方法过程简化
  3. 最全Java面试208题,涵盖大厂必考范围!强烈建议收藏~
  4. Electron使用时拦截HTTP请求的解决方案
  5. For循环执行顺序流程
  6. 深入理解JavaScript的设计模式
  7. perl语言入门(小骆驼)学习(一)
  8. Notepad++无法修改中文解决办法
  9. 小米路由器4a开发版固件_发现篇免拆刷小米路由器4a千兆版刷第三方固件的贴子!...
  10. 入夏短裤热 教你怎么穿
  11. 这些优秀的音视频开源框架你值得收藏
  12. 国产rtos系统RT-Thread基础学习总结
  13. 【修真院pm小课堂】登录注册的触发场景
  14. python根据json数据画疫情分布地图
  15. 好看的多级菜单html,jQuery实现美观的多级动画效果菜单代码
  16. 【翻页电子书制作软件】名编辑电子杂志大师教程 | 添加flash动画
  17. docker 在线安装
  18. 鹫峰-阳台山-凤凰岭一日穿越之路线图
  19. 考试周如何从零基础逆袭到满绩?
  20. 微积分----极限(一)

热门文章

  1. 2017年5月14日青岛卫计委笔试真题解析---综合类(考生回忆版)
  2. 来自Bitly的USA.gov数据
  3. 调用函数用new申请空间的释放方法
  4. 时间序列——滑动窗口
  5. J2EE大作业遇到的问题及解决方案:
  6. 【机器学习】朴素贝叶斯(多分类版本)—— python3 实现方案
  7. Java实现发送邮件(定时自动发送邮件)
  8. rust门卡有什么用_屠龙之技! 使用Rust加速你的Python
  9. presto 剖析详解
  10. 《图数据库》——第 1 章 简介