MongoDB 单机安装 及 Python测试


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
               ##########################

相关内容