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

  • 相关阅读:
    从a文件判断是否删除b文件中的行(sed示例)
    绝对路径的表示方式为什么是"/usr"而不是"//usr"
    判断ssh远程命令是否执行结束
    彻底搞懂shell的高级I/O重定向
    Resource Agent:LSB和OCF
    流程控制语句(MySQL/MariaDB )
    MySQL/MariaDB中游标的使用
    翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)
    从集合的无序性看待关系型数据库中的"序"
    MariaDB/MySQL存储过程和函数
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/4149567.html
Copyright © 2020-2023  润新知