mongodb 盲狗在路上 (一)

 

 我这边的查询场景是数据量大,范围查询,对一致性没有太高的要求,无事务。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

你可能感兴趣的:(MongoDB,Linux,算法,NoSQL,Git,开源)