赞
踩
Title: 地理位置geo处理之mongodb geo 索引
Date: 2017-12-01 10:34
Category: 方案
目前越来越多的业务都会基于LBS,附近的人,外卖位置,附近商家等等,现就讨论离我最近这一业务场景的解决方案。
目前已知解决方案有:
本文测试下mongodb geo索引 函数运算的性能
db.driver.createIndex({loc: "2dsphere"})
- # coding=utf-8
- from pymongo import MongoClient
- import logging
- import random
- import threading
-
- """ 中国的经纬度范围 纬度3.86~53.55,经度73.66~135.05。大概0.00001度差距1米 """
-
- # 创建 日志 对象
- logger = logging.getLogger()
- handler = logging.StreamHandler()
- formatter = logging.Formatter(
- '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
- handler.setFormatter(formatter)
- logger.addHandler(handler)
- logger.setLevel(logging.DEBUG)
-
- # Connect to the mongodb database
-
- mongoconn = MongoClient('127.0.0.1', 27017)
- mdb = mongoconn.geo_analysis
- driver_collection = mdb.driver
-
-
- def ins_driver(thread_name, nums):
- logger.info('开启线程%s' % thread_name)
- for i in range(nums):
- lng = '%.5f' % random.uniform(73.66, 135.05)
- lat = '%.5f' % random.uniform(3.86, 53.55)
- logging.debug('插入记录:%s' % i)
- driver_collection.insert_one({
- "loc":[
- float(lng),
- float(lat)
- ]
- })
-
-
- thread_nums = 10
- for i in range(thread_nums):
- t = threading.Thread(target=ins_driver, args=(i, 40000))
- t.start()
-
以上脚本创建10个线程,10个线程插入4万条数据。耗费52.43s执行完,总共插入40万条数据
系统:mac os
内存:16G
cpu: intel core i5
硬盘: 500g 固态硬盘
测试下查找距离(134.38753,18.56734)附近20公里的司机
db.runCommand({geoNear:'driver', near:[134.38753,18.56734], spherical:true, maxDistance:20000/6378000, distanceMultiplier:6378000});
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。