MongoDB入门
作者:admin 日期:2010-02-04
字体大小: 小 中 大

mongoDB是最近比较热的NoSql数据库之一,它保存的是类似json的数据集合。虽然读写效率不及其它key-value数据库,但是也比RDBMS要高很多了。json数据相比key-value更有层次,开发速度应该会更快一些。不过借助一些开发框架,基于kv的开发应该也很简单,我只是胡乱说说。一般程序员都会关心保存是否方便,查询是否简单,这个也是mongoDB的优势。mongoDB有windows版本,而且json比较有爱,可以很方便地输出给前端。

官方号称mongoDB非常适合保存大尺寸,低价值的数据。这个是什么意思?500年都不会有人去翻动的一个企业的规章制度,以及500年前某个领导的慷慨致辞,或者年会录像。这些东西以前是文本,现在是视频,非常适合大尺寸,低价值的标准。有个数据库非常适合保存低价值的数据?这很容易让人联想到SqlServer2008的FileStream类型,它也很适合保存这些东西。是不是我们可以用mongoDB来搞个分布式的文件系统?好像很适合用来当文档管理系统的后台数据库。

不管怎样,先玩玩她再说。

mongoDB的官方网站是http://www.mongodb.org/,去上面下载最新的程序下来。在下载页面可以看到,对操作系统支持很全面,OS X、Linux、Windows都支持,而且都有各自的32位和64位版本。目前的稳定版本是1.2.0版本。上个月去看的时候还是1.1.3版本,看来更新还是很频繁的说。

下载Windows 64-bit版本并解压缩,程序文件都在bin目录中,其它两个目录分别是C++调用是的头文件和库文件。bin目录中包含如下几个程序:

1. mongo.exe,命令行客户端工具。
2. mongod.exe,数据库服务程序。
3. mongodump.exe,数据库备份程序。
4. mongoexport.exe,数据导出工具。
5. mongofiles.exe,GridFS工具。
6. mongoimport.exe,数据导入工具。
7. mongorestore.exe,数据库恢复工具。
8. mongos.exe,貌似是性能检测工具。

创建D:\Database\mongo\db\文件夹,mongoDB将数据保存在这个文件夹中。执行命令行:

mongod.exe –dbpath D:\Database\monbo\db\

启动数据库服务程序。可以看到类似下面的提示:

Sun Dec 13 01:28:48 Mongo DB : starting : pid = 0 port = 27017 dbpath = D:\Datab
ase\mongo\db\ master = 0 slave = 0 64-bit
Sun Dec 13 01:28:49 db version v1.2.0, pdfile version 4.5
Sun Dec 13 01:28:49 git version: 2add01f37ddf5a262dbc66f81353e88f38723dc6
Sun Dec 13 01:28:49 sys info: windows (6, 0, 6002, 2, ‘Service Pack 2′) BOOST_LI
B_VERSION=1_39
Sun Dec 13 01:28:49 waiting for connections on port 27017

貌似是启动成功了,让我们用客户端连接到服务器测试下。运行mongo.exe,输入:

db.foo.save({a:1})

解释一下上面这个命令。db,表示当前数据库。foo,是一个集合,可以理解为一张名为foo的表。在foo表中保存了一条记录,记录的字段a的值为1。

接下来看看记录是不是真的保存到foo表中了,输入:

db.foo.findOne()

程序输出:

{ “_id” : ObjectId(”4b23d5528327000000004153″), “a” : 1 }

看来数据保存成功了。mongoDB会给每一个collection中的项自动分配一个_id值,可以根据这个id来删除、更新记录。这个id是全局唯一的,所以看起来有点长,有短id强迫症和连续编号强迫症的同学估计比较难适应。不过系统会对这个_id自动作索引,所以再加个guid作为记录的key倒是不错。这样既方便同步在两个系统中,记录默认还是是按插入时间来排序的。

多插入几条数据之后,可以尝试对数据进行搜索,排序,分页等,这些shell命令可以参考这里。通过shell对mongoDB有个初步的了解。