• geo实现方案


    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方案

  • 相关阅读:
    IaaS、PaaS、SaaS的简单介绍
    抓包工具F12和Fiddler的使用
    Element的el-cascader组件获取级联选中的label值
    解决C盘爆满的方法
    js-简单的加密解密函数
    使用removeBg去除图片背景
    git手动提交命令
    JS-下拉筛选的实现
    mysql根据json字段内容作为查询条件
    获取访问用户的客户端IP(适用于公网与局域网)
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/4149567.html
Copyright © 2020-2023  润新知