Monthly Archives: February 2013

mongodb中地理位置信息类型及性能初探

1. 问题的引出 前两天说到LBS系统里如何找到附近的点,假如数据库存储如下信息{x,y}分表表示经度和纬度(这里统统存为正数,方便计算),那么如果取得当前位置信息(x1,y1)如何去数据库里查附近的信息(记录)呢?最原始的想法差不多是: 很显然,这样的话数据库性能会很差的。 那好,根据每个点的信息,作出一个位置指数 loc_index = (x + 360 ) + y 这样,loc_index的值的范围应该在360 到 360 + 360 + 180之间, 然后再选择的时候计算出{x1,y1}的loc_index1,在从数据库里找到相同的值就行了,或者按差值排列。 缺点:计算量,复杂,不好统计距离,山寨,不官方,非权威,不能统计圆形区域,等等。也许存在逻辑错误,但这只是一种假设,因为这不是要确实去实现它,只是失眠想到的一件事情。 2. mongodb的情况 然后第二天,想到了一些NoSql支持这种geo类型,甚至包括PostgreSql都支持了。。 那就拿来试试吧,最简单的就是mongodb了。 本来想用1000w条数据试的,但是可能和OS有关,插入到600w条的时候就死了,再启动出错,repair也不行,最后采用了500w条数据做实验。 数据类型很简单,{place:”some text”,loc : [ -5.9282, 23.222 ] } 插入数据的脚本如下: 以下是实行结果: 从结果看,插入500w条简单数据只用了不到12分钟,占用硬盘情况如下: 将近1G。 数据插入之后,就可以进行查询性能的测试了。

Posted in mongodb Tagged with: , ,

无觅相关文章插件,快速提升流量