IT技术博客大学习 共学习 共进步

白话MongoDB(三)

NinGoo.net 2011-06-21 23:59:26 浏览 2,304 次

    通过源代码编译安装好MongoDB之后,接下来需要配置运行。在MongoDB的安装目录,有几个子目录,bin下面是可执行文件,包括

  • mongod:数据库服务端,类似mysqld,每个实例启动一个进程,可以fork为Daemon运行
  • mongo:客户端命令行工具,类似sqlplus/mysql,其实也是一个js解释器,支持js语法
  • mongodump/mongorestore:将数据导入为bson格式的文件/将bson文件恢复为数据库,类似xtracbackup
  • mongoexport/mongoimport:将collection导出为json/csv格式数据/将数据导入数据库,类似mysqldump/mysqlimport
  • bsondump:将bson格式的文件转储为json格式的数据
  • mongos:分片路由,如果使用了sharding功能,则应用程序连接的是mongos而不是mongod
  • mongofiles:GridFS管理工具
  • mongostat:实时监控工具
  •     最简单的,通过执行mongod即可以启动MongoDB数据库服务,mongod支持很多的参数,但都有默认值,其中最重要的是需要指定数据文件路径,或者确保默认的/data/db存在并且有访问权限,否则启动后会自动关闭服务。Ok,那也就是说,只要确保dbpath就可以启动MongoDB服务了:

    $ ./mongod --dbpath /tmp
    Fri Apr  1 00:34:46 [initandlisten] MongoDB starting : pid=31978 port=27017 dbpath=/tmp 32-bit 
    
    ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
    **       see http://blog.mongodb.org/post/137788967/32-bit-limitations
    **       with --dur, the limit is lower
    
    Fri Apr  1 00:34:46 [initandlisten] db version v1.8.0, pdfile version 4.5
    Fri Apr  1 00:34:46 [initandlisten] git version: 9c28b1d608df0ed6ebe791f63682370082da41c0
    Fri Apr  1 00:34:46 [initandlisten] build sys info: Linux ning 2.6.36-ningoo #1 SMP
    Wed Nov 17 21:45:13 CST 2010 i686 BOOST_LIB_VERSION=1_42
    Fri Apr  1 00:34:46 [initandlisten] waiting for connections on port 27017
    Fri Apr  1 00:34:46 [websvr] web admin interface listening on port 28017

        mongod的主要参数有:

        dbpath: 数据文件存放路径,每个数据库会在其中创建一个子目录。用于防止同一个实例多次运行的mongod.lock也保存在此目录中。

         logpath:错误日志文件

         logappend: 错误日志采用追加模式(默认是覆写模式)

         bind_ip: 对外服务的绑定ip,一般设置为空,及绑定在本机所有可用ip上,如有需要可以单独指定

         port: 对外服务端口。Web管理端口在这个port的基础上+1000

         fork: 以后台Daemon形式运行服务

         journal:开启日志功能,通过保存操作日志来降低单机故障的恢复时间,在1.8版本后正式加入,取代在1.7.5版本中的dur参数。

         syncdelay: 执行sync的间隔,单位为秒。

         directoryperdb: 每个db存放在单独的目录中,建议设置该参数。

         maxConns: 最大连接数

         repairpath: 执行repair时的临时目录。在如果没有开启journal,异常宕机后重启,必须执行repair操作。

        在源代码中,mongod的参数分为一般参数,windows参数,replication参数,replica set参数,以及隐含参数。上面列举的都是一般参数。如果要配置replication,replica set等,还需要设置对应的参数,这里先不展开,后续会有专门的文章来讲述。执行mongo -help可以看到对大多数参数的解释。但有一些隐含参数,则只能通过看代码来获得(见db.cpp po::options_description hidden_options(“Hidden options”);),隐含参数一般要么是还在开发中,要么是准备废弃,因此在生产环境中不建议使用。

        可能你已经注意到,mongod的参数中,没有设置内存大小相关的参数,是的,mongodb使用os mmap机制来缓存数据文件数据,自身目前不提供缓存机制。这样好处是代码简单,mmap在数据量不超过内存时效率很高。但是数据量超过系统可用内存后,则写入的性能可能不太稳定,容易出现大起大落,不过在最新的1.8版本中,这个情况相对以前的版本已经有了一定程度的改善,具体请参考realzyy的测试

        这么多参数,全面写在命令行中则容易杂乱而不好管理。因此,mongod也和mysqld一样支持将参数写入到一个配置文本文件中,然后通过config参数来引用此配置文件:

    ./mongod --config /etc/mongo.cnf

        至此,已经成功的运行了一个单机的mongodb实例。

    建议继续学习

    1. MongoDB与内存 (阅读 6,004)
    2. Nodejs和MongoDB初体验 (阅读 5,763)
    3. 白话MongoDB(一) (阅读 4,664)
    4. 我为什么选择MongoDB (阅读 4,664)
    5. MySQL和MongoDB设计实例对比 (阅读 4,522)
    6. 也来玩玩MongoDB (阅读 4,486)
    7. 记一次MongoDB性能问题 (阅读 4,083)
    8. MySQL Cluster 与 MongoDB 复制及分片设计及原理 (阅读 4,042)
    9. 在MongoDB中模拟auto_increment (阅读 4,024)
    10. 白话MongoDB(二) (阅读 3,526)