我这边的查询场景是数据量大,范围查询,对一致性没有太高的要求,无事务。mongodb是个文档型的nosql数据库。几乎可以作所有关系数据库单表的所有操作,就是不能够join,所以一般都会设计成宽表,或使用它的embeded document。选择mongodb, 主要是因为简单,查询接口非常丰富,它支持排序,分页,范围查询,唯一索引和B+树索引。。
1. 下载
http://www.mongodb.org/downloads
注: 32位操作系统,mongodb只能写到2G。
wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.6.5.tgz
2. 安装
mongo安装非常简单,只要解压一下就行了。
tar zxvf mongodb-linux-i686-1.6.5.tgz
3. 启动
bin目录下的mongod是服务端程序, 启动唯一需要的就是指定data目录
我见了一个数据目录如下,~/mongodb/data, 这个目录随便指定
mongod --dbpath ~mongodb/data
Tue Feb 22 08:13:47 MongoDB starting : pid=3023 port=27017 dbpath=/home/guru/mongodb/data 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 Tue Feb 22 08:13:47 db version v1.6.5, pdfile version 4.5 Tue Feb 22 08:13:47 git version: 0eb017e9b2828155a67c5612183337b89e12e291 Tue Feb 22 08:13:47 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37 Tue Feb 22 08:13:47 [initandlisten] waiting for connections on port 27017 Tue Feb 22 08:13:47 [websvr] web admin interface listening on port 28017
4. 玩玩看
直接运行bin目录下的mongo, 默认会连接到测试库
guru@idea:~/mongodb/mongodb-linux-i686-1.6.5/bin$ mongo MongoDB shell version: 1.6.5 connecting to: test > user={"name":"张三","birth":"20080309"} { "name" : "张三", "birth" : "20080309" } > db.users.insert(user) > db.users.find() { "_id" : ObjectId("4d6301583722875bae8e309c"), "name" : "张三", "birth" : "20080309" } > db.users.findOne() { "_id" : ObjectId("4d6301583722875bae8e309c"), "name" : "张三", "birth" : "20080309" } >
这里的_id=4d6301583722875bae8e309c, 如果没有指定id,mongodb会生成,具体生成规则如下
id一共由12个字节组成,24位16进制数,按字节:
0-3字节: 表示timestamp,精确到秒
4-6字节: 是host的哈希,代表机器名
7-8字节: 代表进程PID
9-11字节:自增值
按照这种算法,前面的9个字节保证同一秒内,不同机器,不同进程是不冲突的,后三个字节保证同一个进程是不冲突的。
我们验证一下, 按照刚才的,又插入了一条记录。
{ "_id" : ObjectId("4d6301583722875bae8e309c"), "name" : "张三", "birth" : "20080309" }
{ "_id" : ObjectId("4d6303623722875bae8e309d"), "name" : "丽丝", "birth" : "20080309" }
按照这种算法,可以知道mongodb在磁盘上是大致按照时间升序,顺序存放的。
附件是mongodb的一本电子书,。
OReilly.MongoDB.The.Definitive.Guide.Sep.2010.pdf