热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python程序操作MongoDB数据库的方法

1.Mongodb版本:mongodb-linux-x86_64-static-legacy-1.8.1.tgz下载地址:http://www.mongodb.org/downloadsmongodb提供两个下载版本:mongodb-linux-x86_64-1.8.1.tgz和mongodb-linux-x86_64
1.Mongodb
   版本:mongodb-linux-x86_64-static-legacy-1.8.1.tgz
  下载地址:http://www.mongodb.org/downloads    mongodb提供两个下载版本: mongodb-linux-x86_64-1.8.1.tgz 和 mongodb-linux-x86_64-static-legacy-1.8.1.tgz
   区别:只有在linux是老系统,mongodb无法启动时,或者出现浮点数异常,才使用"legacy static“版,
尽可能使用mongodb-linux-x86_64-1.8.1.tgz

2.简介
(以下内容从网上摘抄的,原址:http://hi.baidu.com/moioo/blog/item/8d464a8f05eb37f6513d923e.html)
MongDB是一个可扩展,高性能、开源、模式自由、面向文档的数据库,并不是我们通常用的RDBMS,属于“NoSql”的范畴。
它和一般的基于key-value的db还是不大一样,因为他本身的功能很强大,已经实现了类似于SQL的很多功能,
   如index、limit、skip、group。。。。。
   当应用的数据量达到海量级,传统的Mysql,Oracle 不能满足我们的性能需求,而对于数据还有一定的查询需求时,可以考虑
   MongoDB。

3.安装:
   由于RHEL4.3使用mongodb-linux-x86_64-1.8.1.tgz 版本,
  会出现错误: error while loading shared libraries: requires glibc 2.5 or later dynamic linker
所以使用版本:mongodb-linux-x86_64-static-legacy-1.8.1.tgz
  1)创建mongodb程序运行目录及默认的数据存放目录:
     #mkdir -p /usr/local/mongodb-1.18.1
     #mkdir -p /data/db
  2)解压缩:
     #tar zxf mongodb-linux-x86_64-static-legacy-1.8.1.tgz -C /usr/local/mongodb
  3)cd到mongodb安装目录,运行:
     #./mongod --dbpath=/data/db/ --logpath=/data/db/mongodb.log --logappend

4.python测试
   1)RHEL4.3默认的python版本为 2.3.4.
        升级为python 2.7.1
        (1)下载python2.7.1的源码包 http://www.python.org/getit/,版本:Python-2.7.1.tgz
安装:#tar zxf Python-2.7.1.tgz
#cd Python-2.7.1
#configure
#make
#make install
              修改path
#mv /usr/bin/python /usr/bin/python_2.3  //将原始的2.3版本重命名
      #mv /usr/local/bin/python2.7 /usr/bin/python  //将新生成的2.7版本考到/usr/bin/目录下
      #python -V     //查看python新版本是否生效
(2)安装python2.7.1版本对应的setuptools
   下载:http://pypi.python.org/pypi/setuptools  版本:setuptools-0.6c11-py2.7.egg
  安装:#chmod +x setuptools-0.6c11-py2.7.egg
#./setuptools-0.6c11-py2.7.egg
     2)下载并安装mongodb的python驱动包
下载http://www.mongodb.org/downloads,版本:pymongo-1.11.tar.gz
安装:#tar zxf pymongo-1.11.tar.gz
#cd pymongo-1.11
#python setup.py build
#python setup.py install
测试:#python
>>>import pymongo
      3)入库速度测试
测试脚本
########################################################
#!/usr/bin/python
           #-*- coding: utf-8 -*-
           import os,sys
           import random
           import string
           import time
           import pymongo
           insertinfo={}
valid_letters='ABCDEFGHIJKLMNOPQRSTUVWXYZbcdefghijklmnopqrstuvwxyz1234567890'
           def getrandstring(length):
           return ''.join([random.choice(valid_letters) for i in range(0,length)])
           cOnn=pymongo.Connection('127.0.0.1',27017)                  //创建数据库连接
conn.drop_database('test')                                                 //删除已有的数据库 ‘test’
           print 'database_names:%s' % conn.database_names()     //打印当所有的数据库名
           print 'nodes         :%s' % conn.nodes                                 //打印节点名称
           print 'port          :%s' % conn.port                                       //打印单口号
           print 'host          :%s' % conn.host                                      //打印host地址
          #print 'serverinfo    :',conn.server_info()                             //打印server信息
          db=conn.test                                                                     //创建一个数据库连接
mycollection=db.test_collection_2                                    //创建一个collection。若test库和此collection并不存在
则此时也并未实际创建,直到插入数据时,才生成。
          print 'dbname        :%s\n' % db.name                               //打印当前连接的库名
          print "test_collection_2 index info:",mycollection.index_information()   //打印collection的索引信息
          print "connection information ------------------"
          for myconn in db.collection_names():                                                   //打印当前连接的所有colleciton
print myconn
          #print 'insert data ----------------------'
          print mycollection.count()                                                                    //打印当前collection的数据条数
          begtime=time.time()
pretime=begtime
          for i in range(0,1000000):                                                                  //生成循环的随机字符串
insertinfo["_id"]=i                                                                            //手动插入“_id”值.
insertinfo["y"]=str(getrandstring(random.randint(15,30)))
insertinfo["z"]=str(getrandstring(random.randint(15,30)))
insertinfo["m"]=str(getrandstring(random.randint(15,30)))
mycollection.insert(insertinfo,safe=False,check_keys=False)       //向当前的collection插入数据
if db.error() is not None:                                                                //检测插入是否成功,否则输出错误信息
print db.error()
print insertinfo
print mycollection.index_information()
if i % 10000==0:
    print i,mycollection.count(),(time.time()-pretime)
pretime=time.time()
endtime=time.time()
           print 'run time: %s' % (endtime-begtime)
"""
           print 'insert finish,outpu insert info------------------'
           for item in mycollection.find():
for key in item.keys():
print key+":",item[key]
"""
conn.disconnect()                                                                                //关闭数据库连接
########################################################
           测试结果:
本地vmware虚拟机:512M内存,单cpu。
100万数据,插入时间:404.967557907秒。
       生成的数据文件列表:
#ls -l /data/db
##########################  
-rw-------  1 root root  64M Jun 13 09:37 test.0
-rw-------  1 root root 128M Jun 13 09:37 test.1
-rw-------  1 root root 256M Jun 13 09:40 test.2
-rw-------  1 root root  16M Jun 13 09:37 test.ns
##########################

推荐阅读
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
author-avatar
aiminilee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有