pymongo初体验及插入性能测试

Posted 二毛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pymongo初体验及插入性能测试相关的知识,希望对你有一定的参考价值。

话说

网上的pymongo教程都有点老了,也就菜鸟教程的可以看一看,别的博客什么的就别看了,翻了一堆都是过时的,建议直接看官方文档,内容不多,上手也很简单。

发现的问题

  • 和网上的用法不同,目前只用MongoClient()一种连接方式,也不存在safe=true这个参数了,maxPoolSize默认100,可以在连接时自己设置。
  • 和网上的说法不同,据说插入数据的时候指定_id比不指定更快,实际测试恰恰相反,但差别不大,能指定还是指定
  • logging.info()挺耗时间的,测试插入1万条数据,加这一句耗时16秒左右,不加只用7秒左右

pymongo使用

import requests
from pymongo import MongoClient
import logging
import time
import json
from concurrent.futures import ThreadPoolExecutor

logging.basicConfig(level=logging.DEBUG,
                    format=\'%(asctime)s  [%(threadName)s]  %(levelname)s: %(message)s\')

# 复用连接,能大幅提高效率
s = requests.Session()
# 修改默认连接数(10),改为20 host,200连接池,http https 分别对应各自类型,只是需要分别设置
s.mount(\'https://\', requests.adapters.HTTPAdapter(pool_connections=20, pool_maxsize=200))
s.mount(\'http://\', requests.adapters.HTTPAdapter(pool_connections=20, pool_maxsize=200))


def gethtml(uid):
    # url = \'\'
    return uid


def toDB(obj):
    res = obj.result()
    x = collect.insert_one({\'_id\': res + 20000, \'uid\': res})  #   # 加_id貌似更快,网上说的不加更快,都是放屁
    # logging.info(x.inserted_id)


if __name__ == "__main__":
    logging.info(\'start\')
    # client = MongoClient(\'127.0.0.1\', 27017)  # 默认连接
    client = MongoClient(\'127.0.0.1\', 65500, maxPoolSize=200)  # 200连接数
    db = client[\'douyin\']
    collect = db[\'user\']
    pool = ThreadPoolExecutor()  # 默认为CPU数*5
    t = time.perf_counter()
    for short_id in range(10000):
        pool.submit(getHTML, short_id).add_done_callback(toDB)
    pool.shutdown(wait=True)
    client.close()
    t = time.perf_counter() - t
    print(t)

以上是关于pymongo初体验及插入性能测试的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB操作

高性能网关Soul深入解析:http初体验及divide插件功能解析

Memcached初体验及原理解说

LevelDB初体验测试

KVM之初体验——QEMU安装虚拟机

vs code初体验