Django+MongoDB批量插入数据
2018-11-12 06:53:43来源:博客园 阅读 ()
在百万级和千万级数据级别进行插入,pymongo的insert_many()方法有着很强的优势。原因是每次使用insert_one()方法进行插入数据,都是要对数据库服务器进行一次访问,而这样的访问是基于TCP连接的,每次在发送请求的时候服务器端都需要对TCP报文进行解析。而使用insert_many(),可以一次给服务器发送大量的数据,只需要一次的TCP报文解析,既可以插入大量数据,避免了大量的报文解析工作。这样一来,数据插入的效率就会大大提升。所以,为了提升效率,笔者建议在十万数据级别以上使用insert_many()方法。
下面是我通过使用pymongo原生方法和框架中的经常使用的Mongoengine进行的性能测试。
一、使用Mongoengine
Mongoengine是基于面向对象的,在构建集合的时候非常方便,就直接写一个类。而pymongo是继承于MongoDB的文档类型的,所以在框架中使用会相对没有那么方便。但是Mongoengine目前来讲还有许多还没有完善的地方。个人觉得,还是根据实际的需求来选择不同的引擎。
插入数据方面,Mongoengine在0.15版本之前只有save()方法,在0.15版本之后添加了insert_one()和inset_many()方法,具体可以看官方文档:。
但是由于Django官方没有将MongoDB列为建议使用的数据库,所以不支持0.9之后的版本。
代码:
插入一千条数据
插入方法:使用save()保存数据
耗时:大概2秒钟
插入10万条数据
插入方法:使用save()
耗时:两分多钟
二、使用pymongo
(1)测试1:插入一百万数据
插入方法:insert_many()
耗时:28秒
代码:
耗时时间:
插入结果:
(2)测试2:在一百万条数据基础上增加十万数据
插入方法:insert_one()
耗时:1分钟29秒
代码:
耗时时间:
插入结果:
通过上面的测试,很明显的看到,无论是使用Mongoengine的save()方法,还是使用pymongo的insert_one()方法,在大数据量的插入时都会耗费大量的时间,在百万级别的数据就已经需要花费5-6个小时的时间了,显然,这样的效率是很低的。更别说千万级别的数据了。
而使用pymongo的insert_many()方法,在插入百万条数据只是花费了28秒,速度好像快得有点难以想象是吧?按照这样的推算,千万级别数据的数据也大概花费不到5分钟就可以完成了。
那么为什么pymongo的原生方法insert_many()有这么高的效率呢?如何能更进一步提高效率呢?通过阅读源码和分析参数,来了解一下。
insert_many() 定义源码:
def insert_many(self, documents, ordered=True, bypass_document_validation=False, session=None):
官方对参数的解析:
参数:
documents就是我们需要插入的数据文档,也就是上文的articles
下面重点讲ordered和bypass_document_validaion
1. ordered
默认情况下是True,即按顺序来插入多条数据,如果发生错误,就会终止后面的插入。如果设置为False,文档将以任意的顺序将数据插入到服务器中,并且是并行进行的,客户端会尽力将所有的数据都插入到服务器中。所以,设置为False会在数据的插入效率有很大的提升,但也要付出一点数据安全性的代价。
2. bypass_document_validation
默认情况为False。如果为True,那么允许在写入发生错误的时候推出文档级别的验证,不影响后面的数据插入。
设置合适的参数值,可以更好地为海量数据的插入提供更好的插入环境。
笔者:
欢迎评论!希望本人的文章对阅读者有帮助,也希望读者在发现错误的地方及时向我提出,我会尽快修改自己的技术疏漏。作为一个即将毕业的在校生,本人知道自己技术上还有很大的进步空间,我会努力提升自己,也会定时写一些自己学习中的收获和项目中的经验。希望前行的路上,有更多乐于分享的人一起作伴。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Python学习之旅(一)
下一篇:Python变量和循环
- python批量json文件转xml文件脚本(附代码) 2019-07-24
- python爬虫学习基础教程,批量抓取美女图片! 2019-07-24
- python爬虫学习教程,短短25行代码批量下载豆瓣妹子图片 2019-07-24
- 几种翻转类型批量处理图片 2019-05-13
- 开博第一天 2019-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash