banxi1988 发表于 2013-1-12 13:26:18

mongoDB初体验

一直以来都比较喜欢NoSQL。首先是名字好听。
然后前不久下了mongoDB。还借来了mongoDB权威指南一书。
大概浏览了一下。也在mongoDB的官网上mongo shell上体验了一下。
非常不错,而且mongoDB用的javascript,json也都是我喜欢的。
mongoDB官网:mongodb.org
从这个地点开始,就应该能够找到体验mongoDB的所有东西了。
下载mongodb。和相关的驱动啊,还有文档。我是使用wget来下载。就不用在线查看了。
mongoDB下载之后就可以直接使用了。
下面是我下载下来的文档,有些已经解压了:
banxi1988@banxi:~/work/mongoDB$ lsmongo-2.6.5.jarmongodb-linux-i686-2.0.0      SQL+to+Mongo+Mapping+Chart_filesmongo_api      mongodb-linux-i686-2.0.0.tgzmongo_api.zip    mongo_docs.zipbanxi1988@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$ lsmongodb-linux-i686-2.0.0.tgztomcat7banxi1988@banxi:~/bin$ tar zxf mongodb-linux-i686-2.0.0.tgz banxi1988@banxi:~/bin$ lsmongodb-linux-i686-2.0.0mongodb-linux-i686-2.0.0.tgztomcat7banxi1988@banxi:~/bin$ rm mongodb-linux-i686-2.0.0.tgz banxi1988@banxi:~/bin$ lsmongodb-linux-i686-2.0.0tomcat7banxi1988@banxi:~/bin$ cd mongodb-linux-i686-2.0.0/banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0$ lsbinGNU-AGPL-3.0READMETHIRD-PARTY-NOTICESbanxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0$ cd bin/banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ lsbsondumpmongod   mongoexportmongoimport   mongos      mongostatmongo   mongodumpmongofiles   mongorestoremongosniffmongotopbanxi1988@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/dbmkdir: 无法创建目录"/data": 权限不够banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ sudo mkdir -p /data/db 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 --forkforked process: 2811all output going to: /home/banxi1988/bin/mongodb-linux-i686-2.0.0/bin/mongod.logbanxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ cat mongod.log Fri Nov4 10:20:38 Fri Nov4 10:20:38 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.Fri Nov4 10:20:38 Fri Nov4 10:20:38 MongoDB starting : pid=2811 port=27017 dbpath=/data/db/ 32-bit host=banxiFri Nov4 10:20:38 Fri Nov4 10:20:38 ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of dataFri Nov4 10:20:38 **       see http://blog.mongodb.org/post/137788967/32-bit-limitationsFri Nov4 10:20:38 **       with --journal, the limit is lowerFri Nov4 10:20:38 Fri Nov4 10:20:38 db version v2.0.0, pdfile version 4.5Fri Nov4 10:20:38 git version: 695c67dff0ffc361b8568a13366f027caa406222Fri Nov4 10:20:38 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_37Fri Nov4 10:20:38 options: { fork: true, logpath: "mongod.log" }Fri Nov4 10:20:38 waiting for connections on port 27017Fri Nov4 10:20:38 admin web console waiting for connections on port 28017banxi1988@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$ ./mongoMongoDB shell version: 2.0.0connecting to: test> x=19881988> x/2994> 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 fooswitched to db foo> dbfoo> 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命令。如下:
> helpdb.help()                  help on db methodsdb.mycoll.help()             help on collection methodsrs.help()                  help on replica set methodshelp admin                   administrative helphelp connect               connecting to a db helphelp keys                  key shortcutshelp misc                  misc things to knowhelp mr                      mapreduceshow dbs                     show database namesshow collections             show collections in current databaseshow users                   show users in current databaseshow profile               show most recent system.profile entries with time >= 1msshow logs                  show the accessible logger namesshow log             prints out the last segment of log in memory, 'global' is defaultuse <db_name>                set current databasedb.foo.find()                list objects in collection foodb.foo.find( { a : 1 } )   list objects in foo where a == 1it                           result of the last line evaluated; use to further iterateDBQuery.shellBatchSize = x   set default number of items to display on shellexit                         quit the mongo shell> show dbsfoo0.0625GBlocal(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.nsbanxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls -lsh /data/db/foo.017M -rw------- 1 banxi1988 banxi 16M 2011-11-10 18:54 /data/db/foo.0banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls -lsh /data/db/foo.132M -rw------- 1 banxi1988 banxi 32M 2011-11-10 18:54 /data/db/foo.1banxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$ ls -lsh /data/db/foo.ns17M -rw------- 1 banxi1988 banxi 16M 2011-11-10 18:54 /data/db/foo.nsbanxi1988@banxi:~/bin/mongodb-linux-i686-2.0.0/bin$

初始体验在此要进入另一个阶段。即对mongo更清晰的认识。从下一篇文章开始。
关于mongo 体验强烈推荐到mongo官网上的一个在线shell去体验学习。

未完待续--------------
页: [1]
查看完整版本: mongoDB初体验