mongodb初识

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

  • 面向集合存储,易存储对象类型的数据。
  • 模式自由。
  • 支持动态查询。
  • 支持完全索引,包含内部对象。
  • 支持查询。
  • 支持复制和故障恢复。
  • 使用高效的二进制数据存储,包括大型对象(如视频等)。
  • 自动处理碎片,以支持云计算层次的扩展性
  • 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
  • 文件存储格式为BSON(一种JSON的扩展)
  • 可通过网络访问

所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。
模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。

MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB

在32位模式运行时支持的最大文件尺寸为2GB。

MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

以上为随便摘的,其实就是非传统的非关系数据库,现在归到文档型数据库分类之中,注意32位操作系统支持的最大文件为2GB,所以做大文件海量储存的朋友要选择64位的系统安装。

不适用场景

要求高度事务性的系统            复杂的多表查询

下面介绍下安装

wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz
下载完成后解压缩压缩包
tar zxf mongodb-linux-i686-1.8.2.tgz
 
2. 安装准备 
由于mongodb 不需要编译和安装  直接解压开便可以用
将mongodb移动到/usr/local/server/mongdb文件夹
mv mongodb-linux-i686-1.8.2 /usr/local/mongodb     
 
创建数据库文件夹与日志文件
mkdir /usr/local/mongodb/data    数据目录
touch /usr/local/mongodb/logs     日志文件

到此 mongodb 安装完成
参数解释: --dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
--logappend 日志文件末尾添加
--port 启用端口号   默认为27017
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)

启动  /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/dblogs &
[root@localhost ~]# pstree -p | grep mongod
        |-login(1709)---bash(2033)---mongod(2065)-+-{mongod}(2066)   // 2065为主进程    其他都是子进程
        |                                         |-{mongod}(2067)
        |                                         |-{mongod}(2068)
        |                                         |-{mongod}(2069)
        |                                         |-{mongod}(2070)
        |                                         `-{mongod}(2071)
可以把上面的启动程序加到  /etc/rc.local  下面    这样就随系统自动启动了
关闭   pkill mongod     或  killall  mongod
千万不要用kill -9 2065    否则mongodb 再也起不来了  数据目录下会产生个 mongod.lock 的锁文件   删除后才可以正常启动

进到mongo下   在/usr/local/mongodb/bin/mongo   进入
[root@localhost bin]# ./mongo
MongoDB shell version: 1.8.2
connecting to: test
默认会选择test数据库
> show dbs;      //显示所有的数据库 
admin   (empty)
local   (empty)
test    0.0625GB
> db    // 当前数据库  
test
> show tables;  当前数据库下有哪些集合  也就是表 
c1
system.indexes
use  local 切换到loacl数据库下
db.c1.insert({"name":"zhangsan"});
db.c1.find();
db.c1.update({'name':'zhangsan'},{$set:{"sex":1}})
db.c1.remove()    删除c1集合

php创建,切换,删除数据库
$mongo = new Mongo();  
$db = $mongo->selectDB('test');   //切换数据库 

创建数据库
    $mongo = new Mongo();  
    $db = $mongo->selectDB('test');  
    $users = $db->createCollection("users");  
      
    $alldb = $mongo->listDBs();  //列出所有数据库  
    print_r($alldb);           //可以看到db创建成功了  
在这里要注意一下,如果你不创建一个collection(根关系型数据库的表基本上是一样的),是创建不了数据库的。

删除数据库
    $mongo = new Mongo();  
    $db = $mongo->selectDB('test');  
    $db->drop();  

db 帮助
  1. db.AddUser(username,password)  添加用户  
  2. db.auth(usrename,password)     设置数据库连接验证  
  3. db.cloneDataBase(fromhost)     从目标服务器克隆一个数据库  
  4. db.commandHelp(name)           returns the help for the command  
  5. db.copyDatabase(fromdb,todb,fromhost)  复制数据库fromdb---源数据库名称,todb---目标数据库名称,fromhost---源数据库服务器地址  
  6. db.createCollection(name,{size:3333,capped:333,max:88888})  创建一个数据集,相当于一个表  
  7. db.currentOp()                 取消当前库的当前操作  
  8. db.dropDataBase()              删除当前数据库  
  9. db.eval(func,args)             run code server-side  
  10. db.getCollection(cname)        取得一个数据集合,同用法:db['cname'or  
  11. db.getCollenctionNames()       取得所有数据集合的名称列表  
  12. db.getLastError()              返回最后一个错误的提示消息  
  13. db.getLastErrorObj()           返回最后一个错误的对象  
  14. db.getMongo()                  取得当前服务器的连接对象get the server  
  15. db.getMondo().setSlaveOk()     allow this connection to read from then nonmaster membr of a replica pair  
  16. db.getName()                   返回当操作数据库的名称  
  17. db.getPrevError()              返回上一个错误对象  
  18. db.getProfilingLevel()         获取profile level  
  19. db.getReplicationInfo()        获得重复的数据  
  20. db.getSisterDB(name)           get the db at the same server as this onew  
  21. db.killOp()                    停止(杀死)在当前库的当前操作  
  22. db.printCollectionStats()      返回当前库的数据集状态  
  23. db.printReplicationInfo()        打印主数据库的复制状态信息  
  24. db.printSlaveReplicationInfo()        打印从数据库的复制状态信息  
  25. db.printShardingStatus()       返回当前数据库是否为共享数据库  
  26. db.removeUser(username)        删除用户  
  27. db.repairDatabase()            修复当前数据库  
  28. db.resetError()  
  29. db.runCommand(cmdObj)          run a database command. if cmdObj is a string, turns it into {cmdObj:1}  
  30. db.setProfilingLevel(level)    设置profile level 0=off,1=slow,2=all  
  31. db.shutdownServer()            关闭当前服务程序  
  32. db.version()                   返回当前程序的版本信息

表的帮助 
  1. db.test.find({id:10})          返回test数据集ID=10的数据集  
  2. db.test.find({id:10}).count()  返回test数据集ID=10的数据总数  
  3. db.test.find({id:10}).limit(2) 返回test数据集ID=10的数据集从第二条开始的数据集  
  4. db.test.find({id:10}).skip(8)  返回test数据集ID=10的数据集从0到第八条的数据集  
  5. db.test.find({id:10}).limit(2).skip(8)  返回test数据集ID=1=的数据集从第二条到第八条的数据  
  6. db.test.find({id:10}).sort()   返回test数据集ID=10的排序数据集  
  7. db.test.findOne([query])       返回符合条件的一条数据  
  8. db.test.getDB()                返回此数据集所属的数据库名称  
  9. db.test.getIndexes()           返回些数据集的索引信息  
  10. db.test.group({key:...,initial:...,reduce:...[,cond:...]})    返回分组信息  
  11. db.test.mapReduce(mayFunction,reduceFunction,<optional params>)  这个有点像存储过程  
  12. db.test.remove(query)                      在数据集中删除一条数据  
  13. db.test.renameCollection(newName)          重命名些数据集名称  
  14. db.test.save(obj)                          往数据集中插入一条数据  
  15. db.test.stats()                            返回此数据集的状态  
  16. db.test.storageSize()                      返回此数据集的存储大小  
  17. db.test.totalIndexSize()                   返回此数据集的索引文件大小  
  18. db.test.totalSize()                        返回些数据集的总大小  
  19. db.test.update(query,object[,upsert_bool]) 在此数据集中更新一条数据  
  20. db.test.validate()                         验证此数据集  
  21. db.test.getShardVersion()                  返回数据集共享版本号 






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值