使用python访问mongodb的一些坑

最近在用python编写一个测试mongoDB性能的工具,过程中遇到了一些坑,记录一下:

1.使用多线程并发写mongoDB时的性能相比单线程没有提升,有些时候还有下降

答:网上搜了下,发现很多人都遇到过这个现象,mongoClient虽然默认提供了线程池,但实际情况并不乐观。

最终是使用了多进程的方法来提升读写性能,使用多进程后,读写性能大幅提升,代价是执行机的CPU资源利用率很高

2.使用multiprocessing时,报错can't pickle_thread.loack objects,无法开启多进程

答:这是pymongo的一个限制导致的。每个进程必须创建自己的MongoClient instance。不能多个进程共享MongoClient实例

3.关于fnv库。之前设计的思路是,可以根据指定的种子来随机生成冲突率很低的哈希值作为_id,这样读取时可以根据相同的种子来计算出_id值,从而实现使用_id值来读取document的功能。所以选择了fnv库的fnv1a_64来实现。但实际上,该方法只有在python2.7才能实现,在python3则不可以。原因是python3中,fnv1a_64算法的实现发生了改变,该算法自己提供了随机种子来生成hash值,从而最终用户无法准确给出_id值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值