`

mongodb实践 5

阅读更多

今天把mongodb升级到2.0.2了 ,另外iteye的在线编辑器真不怎么好用

 

#mongodb数据库管理篇

#mongodb的部署

*一个或者多个分片(shard),每个分片持有全部数据的一部分(自动管理的),读写操作被自动路由到合适的分片上,每一个分片都有一个副本。

副本是一个或者多个服务器,每个服务器都持有相同的数据拷贝。在任何指定的时间里,只有一个作为主服务器,其他的作为辅助服务器。

所有最终一致的的读取都分布在这些辅助服务器上。

*多个配置服务器(config server),每一个配置服务器拥有的元数据的拷贝指明了哪些数据寄存在哪些分片上。

*一个或者多个路由器(routers),每一个路扮演作客户端的服务器的角色。客户端发送查询/更新请求到一个路由器,然后路由器通过咨询配置服务器

为它们指定一个合适的分片(或者说路由器通过查询配置服务器,把这些请求路由到某个合适的分片)。

 

*客户端(clients),客户端是用户应用(或者应用的部分),客户端通过mongodb为它提供的相应语音的驱动程序向路由器发送命令,mongod是服务器

程序(数据或者配置),mongos是路由器程序。

#mongo的数据模型

*mongo系统保存一系列数据库

*数据库保存一系列集合(网上大多翻译为聚集)

*集合保存一系列文档

*文档是一系列域

*域是一个键值对

*键是值的名字

*值是

*基本类型,如string, integer, float, timestamp, binary, 等

*或者文档,

*或者数组

 

#mongodb的架构域组件

#一下是mongodbserver包中的组件(进程)列表

*mongod 数据库核心进程

*mongos 分片控制器

*mongo 数据库shell(交互的javascript)

*导入到处工具

*mongoimport

*mongoexport

*mongodump

*mongorestore

*bsondump

*mongofiles GridFS实用工具

*mongostat

mongodb数据库服务器有两个主要的组件。第一个是mongod进程,它是数据库服务器的核心进程。许多请求下mongod被当作一个自给自足的系统,类似如何

在服务器上使用Mysql。独立的mongod实例在不同的机器上(还有数据中心)能够从一个到另一个进行复制。另一个是mongos进程,它辅助自动分片。mongos进程

可以被认为是一个数据库路由器,它使得一个mongod进程集群看上去向一个单个的数据库。

 

#日志

*mongodb v1.7.5以后支持操作的写前(write-ahead)日志,从而帮助数据库从崩溃中快速恢复和存储引擎的持久化。

#禁用/启用

*在版本1.9.2以后日志在64位平台上默认启用,你可以通过mongod --nojournal命令行选项来禁用日志。

*1.9.2之前的版本或者32位平台上,你可以通过mongod --journal命令来启用日志。

在开启日志运行数据库时,简单的关闭数据库,并使用 --nojournal选项重启数据库来禁用日志是没有问题的,同样相反的操作也是可以的。

mongodb认为为日志文件预分配文件,要比在需要是创建文件更加快。mongodb决定预分配文件,mongodb不回监听27017端口知道这个进程完成,这个需要话费几分钟。

这意味着你的应用程序和shell在数据库启动时都无法立即连接到数据库,检测日志看mongodb是否正忙于预创建文件,完成时会打印"waiting for connections on port whatever"的信息。

#日志文件

当日志启用时,日志文件会被创建在数据库目录下的journal子目录下,这些文件是写前重做日志。另外,一个最后序列号文件--journal/lsn也会被创建。清除式的关闭会删除journal下的所有文件。

mongo的数据文件(如,databasename.ns,databasename.0,databasename.1,。。。)与以以前的发现版本有相同的格式,因此,升级和回滚都是无缝的。

#恢复

在一次崩溃重新启动是,日志文件在服务启动之前重放一次,这会在日志输出中显示。你不需要运行修复。

#journal子目录

你可能希望在启动mongod符号连接到journal/目录到一个特定的硬盘驱动器来加速发送在当前日志文件上的频繁的顺序写入。

#组提交

mongodb在使用日志时执行组提交(批量提交),这意味着在若干毫秒里的一系列操作会被一次性同时提交,这样做是为了实现高性能。

 

#mongodb监听服务

mongodb监听服务是一个免费的SaaS解决方案,它可以主动监听你的mongodb集群。

 

#数据库与缓存

在关系数据库中对象缓存通常是一个独立的设备(例如Memcached),这使得关系数据库中例如RAM page cache(内存分页缓存)命中是一个相当昂贵的操作(这可能需要使用连接操作,并且数据必须被转换成对象的表现形式)。

此外,Memcached类型的解决方案相较于关系型数据库具有更优越的扩展性。

mogodb消除了对独立对象缓存层的需求。

在文件系统RAM cache中查询非常快,如同数据库中的对象表现非常接近应用程序内存中的对象表现。mongodb也能扩展到任意层,提供对象缓存与数据库集成,这将很有帮助,因为不会从缓存取到旧数据。另外,复杂的sql查询也是可能的。

 

简单测试主从式服务器:

 

主服务器:

>mongod -master -dbpath=F:/data/db/master -port=10000
Fri Dec 16 15:35:25 [initandlisten] MongoDB starting : pid=4372 port=10000 dbpath=F:/data/db/master master=1 64-bit host=shenbaise-PC
Fri Dec 16 15:35:25 [initandlisten] db version v2.0.2, pdfile version 4.5
Fri Dec 16 15:35:25 [initandlisten] git version: 514b122d308928517f5841888ceaa4246a7f18e3
Fri Dec 16 15:35:25 [initandlisten] build info: windows (6, 1, 7601, 2, 'Service Pack 1') BOOST_LIB_VERSION=1_42
Fri Dec 16 15:35:25 [initandlisten] options: { dbpath: "F:/data/db/master", master: true, port: 10000 }
Fri Dec 16 15:35:26 [initandlisten] journal dir=F:/data/db/master/journal
Fri Dec 16 15:35:26 [initandlisten] recover : no journal files present, no recovery needed
Fri Dec 16 15:35:26 [initandlisten] waiting for connections on port 10000
Fri Dec 16 15:35:26 [websvr] admin web console waiting for connections on port 11000

  从服务器:

 

  
mongod -slave -source=192.168.0.182:10000 -dbpath=F:/data/db/slave -port=20000 --autoresync
Fri Dec 16 14:40:41 [initandlisten] MongoDB starting : pid=5240 port=20000 dbpath=F:/data/db/slave slave=1 64-bit host=shenbaise-PC
Fri Dec 16 14:40:41 [initandlisten] db version v2.0.2, pdfile version 4.5
Fri Dec 16 14:40:41 [initandlisten] git version: 514b122d308928517f5841888ceaa4246a7f18e3
Fri Dec 16 14:40:41 [initandlisten] build info: windows (6, 1, 7601, 2, 'Service Pack 1') BOOST_LIB_VERSION=1_42
Fri Dec 16 14:40:41 [initandlisten] options: { autoresync: true, dbpath: "F:/data/db/slave", port: 20000, slave: true, source: "192.168.0.182:10000" }
Fri Dec 16 14:40:41 [initandlisten] journal dir=F:/data/db/slave/journal
Fri Dec 16 14:40:41 [initandlisten] recover : no journal files present, no recovery needed
Fri Dec 16 14:40:41 [initandlisten] waiting for connections on port 20000
Fri Dec 16 14:40:41 [websvr] admin web console waiting for connections on port 21000
Fri Dec 16 14:40:42 [replslave] build index local.sources { _id: 1 }
Fri Dec 16 14:40:42 [replslave] build index done 0 records 0.008 secs
Fri Dec 16 14:40:42 [replslave] repl: from host:192.168.0.182:10000
Fri Dec 16 14:40:42 [replslave] build index local.me { _id: 1 }
Fri Dec 16 14:40:42 [replslave] build index done 0 records 0.001 secs
Fri Dec 16 14:40:46 [replslave] repl:   applied 0 operations
Fri Dec 16 14:40:46 [replslave] repl:  end sync_pullOpLog syncedTo: Dec 16 14:40:38 4eeae7e6:1
Fri Dec 16 14:40:46 [replslave] repl: sleep 2 sec before next pass
Fri Dec 16 14:40:48 [replslave] repl: from host:192.168.0.182:10000
Fri Dec 16 14:40:52 [replslave] repl:   applied 1 operations

 

--autoresync选项会使得主从服务器自动同步数据。也可以自行设置同步时间如,–slavedelay 10

 

连接到数据库:

 

  
>mongo 192.168.0.182:20000
MongoDB shell version: 2.0.2
connecting to: 192.168.0.182:20000/test
> db.printSlaveReplicationInfo();
source:   192.168.0.182:10000
	 syncedTo: Fri Dec 16 2011 15:41:23 GMT+0800
		 = 5 secs ago (0hrs)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics