一直以来都比较喜欢NoSQL。首先是名字好听。
然后前不久下了mongoDB。还借来了mongoDB权威指南一书。
大概浏览了一下。也在mongoDB的官网上mongo shell上体验了一下。
非常不错,而且mongoDB用的javascript,json也都是我喜欢的。
mongoDB官网:mongodb.org
从这个地点开始,就应该能够找到体验mongoDB的所有东西了。
下载mongodb。和相关的驱动啊,还有文档。我是使用wget来下载。就不用在线查看了。
mongoDB下载之后就可以直接使用了。
下面是我下载下来的文档,有些已经解压了:
banxi1988@banxi:~/work/mongoDB$ ls
mongo-2.6.5.jar mongodb-linux-i686-2.0.0 SQL+to+Mongo+Mapping+Chart_files
mongo_api mongodb-linux-i686-2.0.0.tgz
mongo_api.zip mongo_docs.zip
banxi1988@banxi:~/work/mongoDB$
然后将它copy到我主目录下的bin文件中吧。操作如下:
banxi1988@banxi:~/work/mongoDB$ cp mongodb-linux-i686-2.0.0.tgz ~/bin/
banxi1988@banxi:~/work/mongoDB$ cd ~/bin/
banxi1988@banxi:~/bin$ ls
mongodb-linux-i686-2.0.0.tgz tomcat7
banxi1988@banxi:~/bin$ tar zxf mongodb-linux-i686-2.0.0.tgz
banxi1988@banxi:~/bin$ ls
mongodb-linux-i686-2.0.0 mongodb-linux-i686-2.0.0.tgz tomcat7
banxi1988@banxi:~/bin$ rm mongodb-linux-i686-2.0.0.tgz
banxi1988@banxi:~/bin$ ls
mongodb-linux-i686-2.0.0 tomcat7
banxi1988@banxi:~/bin$ cd mongodb-linux-i686-2.0.0/
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0$ ls
bin GNU-AGPL-3.0 README THIRD-PARTY-NOTICES
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0$ cd bin/
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls
bsondump mongod mongoexport mongoimport mongos mongostat
mongo mongodump mongofiles mongorestore mongosniff mongotop
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$
可以看到mongoDB的这个已经都是一些已经编译好了的bin文件了。
主要的是mongod。对应于mysql的mysqld
另一个是mongo对应于mysql的mysql
在启动mongod之前首先要建立数据库目录。默认的数据库目录是/data/db/,在启动的时候也可以另的目录。
如果使用默认目录的话,在启动之前要确保有写的权限。
下面的操作可以达到这样的效果。
如下:
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ mkdir -p /data/db
mkdir: 无法创建目录"/data": 权限不够
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ sudo mkdir -p /data/db
[sudo] password for banxi1988:
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls /data/db/
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ sudo chown -R $USER:$USER /data/db/
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls -l /data/db/
总用量 0
在正式启动mongod之前,我们还是先了解下mongod的一些启动选项吧。
可能通过$./mongod --help来查看。
--dbpath arg 指定数据目录,默认值是/data/db/(上面已经创建好了)。每个mongod进程都需要独立的数据目录。(在新的2.0中也许不是这样的啦)因为有下面一个选项
--directoryperdb each database will be stored in a separate
directory
--port arg 指定服务器监听端口号,默认端口是27017。多个mongod进程要指定不同的端口号。
--fork 以守护进程的方式运行mongoDB,创建服务器进程。
--logpath arg 指定输出日志的文件。它会将已经有的文件覆盖掉,如果不想覆盖则需要使用--logappend选项。
启动信息如下:
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ./mongod --logpath mongod.log --fork
forked process: 2811
all output going to: /home/banxi1988/bin/mongodb-linux-i686-2.0.0/bin/mongod.log
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ cat mongod.log
Fri Nov 4 10:20:38
Fri Nov 4 10:20:38 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Fri Nov 4 10:20:38
Fri Nov 4 10:20:38 [initandlisten] MongoDB starting : pid=2811 port=27017 dbpath=/data/db/ 32-bit host=banxi
Fri Nov 4 10:20:38 [initandlisten]
Fri Nov 4 10:20:38 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
Fri Nov 4 10:20:38 [initandlisten] ** see http://blog.mongodb.org/post/137788967/32-bit-limitations
Fri Nov 4 10:20:38 [initandlisten] ** with --journal, the limit is lower
Fri Nov 4 10:20:38 [initandlisten]
Fri Nov 4 10:20:38 [initandlisten] db version v2.0.0, pdfile version 4.5
Fri Nov 4 10:20:38 [initandlisten] git version: 695c67dff0ffc361b8568a13366f027caa406222
Fri Nov 4 10:20:38 [initandlisten] build 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
Fri Nov 4 10:20:38 [initandlisten] options: { fork: true, logpath: "mongod.log" }
Fri Nov 4 10:20:38 [initandlisten] waiting for connections on port 27017
Fri Nov 4 10:20:38 [websvr] admin web console waiting for connections on port 28017
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$
关闭mongodb的方法如下:
像其它linux进程一样
优雅且稳妥的方法是向mongod发送SIGINT 或者SIGTERM信号。
如果服务器是在前台进程运行的话直接Ctrl-C就可以了。
否则可以使用
$kill -2 pid #-2 sigint
$kill pid # 默认是sigterm
当mongod收到上面的信号后,会稳妥的退出。
注意:千万不要使用$kill -9 pid 来杀死进程。这样会导致数据文件损坏。
还可以使用mongod本身的--shutdown选项。
或者在mongo shell中在admin数据库下使用如:
>use admin
switched to db admin
>db.shutdownServer()
server should be down...
启动了mongod后台服务进程之后,到了真正体验mongo的时候。
像mysql提供了一个mysql客户端一样。mongo提供了一个名为mongo的shell。
这是一个JavaScript的Shell。
1.运行,如下:
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ./mongo
MongoDB shell version: 2.0.0
connecting to: test
> x=1988
1988
> x/2
994
> Math.sin(Math.PI/2);
1
> new Date('2011/11/10')
ISODate("2011-11-09T16:00:00Z")
mongo shell有三个显示特点:
(1)mongo shell会在启动时自动连接mongoDB服务器mongod。
(2)shell是功能完备的JavaScript解释器。,可以运行任何JavaScript程序。上面有示例了。
(3) shell会自动 检测输入的Javascript语句是否写完。如果没有写完,在下一行接着写。同时shell也有一些非javascript的扩展。
(2) 数据操作。这里没有明显的创建数据库的操作。
> use foo
switched to db foo
> db
foo
> post={"title":"my blog post",
... "content":"Here,is a test",
... "date":new Date()}
{
"title" : "my blog post",
"content" : "Here,is a test",
"date" : ISODate("2011-11-10T10:54:37.802Z")
}
> db.foo.insert(post)
> db.foo.find()
{ "_id" : ObjectId("4ebbad820c3f8817c7f6ed57"), "title" : "my blog post", "content" : "Here,is a test", "date" : ISODate("2011-11-10T10:54:37.802Z") }
>
在选择使用数据库时如果没有此名称的数据库则会创建。
这个与mysql比较接近,利于熟悉mysql的人学习使用。
查看下使用帮助,然后尝试了下show dbs命令。如下:
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
rs.help() help on replica set methods
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
> show dbs
foo 0.0625GB
local (empty)
>
令我意外的是,刚创建的foo数据库居然有0.0625GB。
我查看下是否是确实
如果,确实mongo创建一看起来很大的三个文件:
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls -lsh /data/db/foo.
foo.0 foo.1 foo.ns
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls -lsh /data/db/foo.0
17M -rw------- 1 banxi1988 banxi 16M 2011-11-10 18:54 /data/db/foo.0
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls -lsh /data/db/foo.1
32M -rw------- 1 banxi1988 banxi 32M 2011-11-10 18:54 /data/db/foo.1
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls -lsh /data/db/foo.ns
17M -rw------- 1 banxi1988 banxi 16M 2011-11-10 18:54 /data/db/foo.ns
banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$
初始体验在此要进入另一个阶段。即对mongo更清晰的认识。从下一篇文章开始。
关于mongo 体验强烈推荐到mongo官网上的一个在线shell去体验学习。
未完待续--------------