1、数据库内在支持GIS(地理信息系统)
MySQL: 目前只有MyISAM引擎是支持GIS的,Innodb在5.7版本中才支持空间索引。MyISAM这个引擎
不支持事务、外键,而且是表锁。适合读为主,不适合写操作。而且如果单独建一张表的话,那每次都要与
现有的表联合查询返回tag的地点,效率多少会有些影响,而且也不确定Django是否支持Innodb与myISAM
引擎联合查询。(目前用的Innodb引擎)
其它数据库:MongoDB和postgresql都是支持GIS的,前者没有仔细研究,后者在GIS方面很强大,
但目前还不考虑切换数据库。

2、第三方app或框架
GeoDjango:它是一个支持GIS存储和查询的Django衍生项目。不过这个框架太重了,内容太多,简单
熟悉了一下,它的功能还是很强大的。但在数据库层,它也是需要数据库支持GIS的。
数据库全文检索:用的比较多的是lucene和sphinx工具,熟悉这两个工具的时间成本太高了,而且从性能
上来说和自己用mysql查询差不多。

3、自己开发
考虑有两种方案,
(1) 数据库保存地点的经纬度,查找附近的地点时,用球面两点间距离公式计算并排序。
为了提高效率,还可以将其保存成存储过程。
(2)将经纬度转为一维数据geohash,这样可以在geohash上用加索引,而且用like语句
可实现查询。不过要至少调用6条like语句,而且不能实现任意距离的搜索,只能搜索几个距离
范围内的地点。

目前,公司负责开发的产品需求并不需要精确搜索,从时间成本、性能两方面考察这些方案,最好的两个方案是
比较合适的。最终选定geohash方案

geo实现方案的更多相关文章

  1. Redis百亿级Key存储方案(转)

    1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...

  2. Redis百亿级Key存储方案

    1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...

  3. LBS优化方案探究

    方案1: 假设数据结构是这个样子的结构 那么找某个范围之内的用户,相当于: select * from tb_lbs_user where lat > lat_min and lat < ...

  4. 高可用性的负载均衡方案之lvs+keepalived和haproxy+heartbeat区别

    高可用性的负载均衡方案 目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实现的负载均衡的作用,keepalived和heartbeat都是提高高可用性的,避免单点故障.那么他们为 ...

  5. 地理位置geo处理之mysql函数

    目前越来越多的业务都会基于LBS,附近的人,外卖位置,附近商家等等,现就讨论离我最近这一业务场景的解决方案. 原文:https://www.jianshu.com/p/455d0468f6d4 目前已 ...

  6. 使用GEO数据库来筛选差异表达基因,KOBAS进行KEGG注释分析

    前言 本文主要演示GEO数据库的一些工具,使用的数据是2015年在Nature Communications上发表的文章Regulation of autophagy and the ubiquiti ...

  7. Java中“附近的人”实现方案讨论及代码实现

    前言 在我们平时使用的许多app中有附近的人这一功能,像微信.qq附近的人,哈罗.街兔附近的车辆.这些功能就在我们日常生活中出现. 像类似于附近的人这一类业务,在Java中是如何实现的呢? 本文就简单 ...

  8. TableStore最佳实践:GEO索引打造店铺搜索系统

    摘要: 如何使用TableStore打造店铺搜索系统 一.方案背景 对于一套GEO管理系统,其核心点与瓶颈在于数据库的存储性能与查询能力:一方面,存储服务需要应对海量数据的低延迟存.读,另一方面,存储 ...

  9. geo常见需求

    常见的地理位置相关需求有: 1.查找附近的人 2.显示两点距离 3.点是否在指定范围内(地理围栏) redis.MongoDB.mysql都已支持geo 几种geo方案对比 https://blog. ...

随机推荐

  1. python学习笔记(1)--遍历txt文件,正则匹配替换文字

    遍历一个文件夹,把里面所有txt文件里的[]里的朗读时间删除,也就是替换为空. import os import re import shutil #os文件操作,re正则,shutil复制粘贴 pa ...

  2. 基于jquery垂直缩略图切换相册

    今天给大家分享一款垂直缩略图切换jQuery相册,这是一款垂直缩略图左右滚动切换响应式jQuery图片相册代码.该 插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Oper ...

  3. 最新PHPcms9.6.0 任意文件上传漏洞

    在用户注册处抓包: 然后发送到repeater POC: siteid=&modelid=&username=z1aaaac121&password=aasaewee311as ...

  4. Linux下protobuf的编译与安装

    1.下载源码 首先,从github上下载protobuf的源码,地址:https://github.com/google/protobuf,我选择下载2.5.0版本. 2.编译protobuf 将下载 ...

  5. shiro配置unauthorizedUrl,无权限抛出无权限异常,但是不跳转

    在使用shiro配置无授权信息的url的时候,发现这样的一个scenario,配置好unauthorizedUrl后仍然无法跳转,然后就在网上开始找,找了原因以及解决方案 原因,先post一个源码: ...

  6. WebIM技术---编写前端WebSocket组件

    过去我们想要实现一个实时Web应用通常会考虑采用ajax轮循或者是long polling技术,但是因为频繁的建立http连接会带来多余的请求以及消息精准性的问题,让我们在实现实时Web应用时头疼不已 ...

  7. 数论 - 119. Magic Pairs

    Magic Pairs Problem's Link Mean: 已知N.A0.B0,对于给定X.Y,若A0X+B0Y能被N整除,则AX+BY也能被N整除,求所有的A.B.(0<=A.B< ...

  8. 时钟.html

    <!DOCTYPE html><html charset="utf-8"> <head> <title>时钟</title&g ...

  9. css实现圆角三角形例子(无图片)

    css实现圆角三角形例子(无图片) 以前我们做圆角时都会要用到图片来实现,今天我给大家整理的这款css圆角效果是不需要图片的纯css实现的哦,下面我们一起来看看吧. 效果如下图所示 三角形所对方向&q ...

  10. noip2014滚粗记

    滚粗了..伤心. day0:和baba一起去,但是整天都是下雨啊好不爽,鞋子都湿了啊好不爽,注定是要滚粗?在火车站等了1h后上动车走人...在此期间我还天真的认为火车站的wifi可以被我给破解然后上网 ...