zoukankan      html  css  js  c++  java
  • 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方案

  • 相关阅读:
    软件测试从业者,试用期生存指南(完整版)
    学测试,看视频?NONONO,除非这种情况
    vi / vim 字符替换详解
    Centos 下 mysql 安装过程
    Web测试到底是在测什么(资料合集)
    我花了两个小时,写了这份年终总结 。
    拒绝无效加班 !
    你离月薪30K还差哪些?
    从业十年分享:你应该知道的一些测试职业事实!
    别再TM跟我说找不到满意的工作!
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/4149567.html
Copyright © 2011-2022 走看看