设为首页 收藏本站
查看: 868|回复: 0

[经验分享] MongoDB学习资料一MongoDB数据库简单介绍(转)

[复制链接]
发表于 2015-7-8 05:12:31 | 显示全部楼层 |阅读模式
MongoDB数据库简单介绍(一)
Mongo是一个高性能,开源,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发,提供了以下功能:


  • 面向集合的存储:适合存储对象及JSON形式的数据。
  • 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
  • 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
  • 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
  • 自动分片以支持云级别的伸缩性(处于早期alpha阶段):自动分片功能支持水平的数据库集群,可动态添加额外的机器。

MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。根据官方网站的描述,Mongo 适合用于以下场景:


  • 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
  • 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
  • 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
  • 用于对象及JSON数据的存储:Mongo的BJSON数据格式非常适合文档化格式的存储 及查询。

自然,MongoDB的使用也会有一些限制,例如它不适合:


  • 高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
  • 传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
  • 需要SQL的问题

MongoDB支持OS X、Linux及Windows等操作系统,并提供了Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang 及.NET等平台的驱动程序
MongoDB下载:
http://www.mongodb.org/display/DOCS/Downloads
http://downloads.mongodb.org/lin ... 686-v1.2-latest.tgz
MongoDB安装:  CODE:
[falcon@www.fwphp.cn  ~/mongodb]$tar xvzf mongodb-linux-i686-v1.2-latest.tgz
[falcon@www.fwphp.cn  ~/mongodb]$mv mongodb-linux-i686-v1.2-latest mongodb
[falcon@www.fwphp.cn  ~/mongodb]$cd mongodb
[falcon@www.fwphp.cn  ~/mongodb]$ ls
mongo   mongodump    mongofiles   mongorestore  mongosniff
mongod  mongoexport  mongoimport  mongos只需要解压到相关目录即可,不需要编译安装
MongoDB启动与关闭:
mongoDB的服务器端程序为mongod  CODE:
[falcon@www.fwphp.cn  ~/mongodb]$ bin/mongod --help
** 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 for more
Allowed options:
General options:
  -h [ --help ]             show this usage information
  --version                 show version information
  -f [ --config ] arg       configuration file specifying additional options
  --port arg                specify port number
  --bind_ip arg             local ip address to bind listener - all local ips
                            bound by default
  -v [ --verbose ]          be more verbose (include multiple times for more
                            verbosity e.g. -vvvvv)
  --dbpath arg (=/data/db/) directory for datafiles    指定数据存放目录
  --quiet                   quieter output   静默模式
  --logpath arg             file to send all output to instead of stdout   指定日志存放目录
  --logappend               appnd to logpath instead of over-writing  指定日志是以追加还是以覆盖的方式写入日志文件
  --fork                    fork server process   以创建子进程的方式运行
  --cpu                     periodically show cpu and iowait utilization  周期性的显示cpu和io的使用情况
  --noauth                  run without security  无认证模式运行
  --auth                    run with security  认证模式运行
  --objcheck                inspect client data for validity on receipt  检查客户端输入数据的有效性检查
  --quota                   enable db quota management   开始数据库配额的管理
  --quotaFiles arg          number of files allower per db, requires --quota  规定每个数据库允许的文件数
  --appsrvpath arg          root directory for the babble app server  
  --nocursors               diagnostic/debugging option  调试诊断选项
  --nohints                 ignore query hints  忽略查询命中率
  --nohttpinterface         disable http interface  关闭http接口,默认是28017
  --noscripting             disable scripting engine  关闭脚本引擎
  --noprealloc              disable data file preallocation  关闭数据库文件大小预分配
  --smallfiles              use a smaller default file size  使用较小的默认文件大小
  --nssize arg (=16)        .ns file size (in MB) for new databases 新数据库ns文件的默认大小
  --diaglog arg             0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式
  --sysinfo                 print some diagnostic system information 打印系统诊断信息
  --upgrade                 upgrade db if needed  如果需要就更新数据库
  --repair                  run repair on all dbs  修复所有的数据库
  --notablescan             do not allow table scans  不运行表扫描
  --syncdelay arg (=60)     seconds between disk syncs (0 for never)  系统同步刷新磁盘的时间,默认是60s
Replication options:
  --master              master mode 主复制模式
  --slave               slave mode  从复制模式
  --source arg          when slave: specify master as  当为从时,指定主的地址和端口
  --only arg            when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库
  --pairwith arg        address of server to pair with
  --arbiter arg         address of arbiter server  仲裁服务器,在主主中和pair中用到
  --autoresync          automatically resync if slave data is stale 自动同步从的数据
  --oplogSize arg       size limit (in MB) for op log 指定操作日志的大小
  --opIdMem arg         size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小
Sharding options:
  --configsvr           declare this is a config db of a cluster 指定shard中的配置服务器
  --shardsvr            declare this is a shard db of a cluster 指定shard服务器在启动mongoDB之前,我们必须新建一个存放mongoDB数据和日志的目录  CODE:
[falcon@www.fwphp.cn  ~]$ mkdir m_data m_log到此mongodb启动的准备工作做完了,现在我们启动mongodb  CODE:
[falcon@www.fwphp.cn  ~/mongodb]$ bin/mongod --dbpath=/home/falcon/m_data --logpath=/home/falcon/m_log --logappend &现在mongodb启动了,检查是否启动的方法:  CODE:
[falcon@www.fwphp.cn  ~/mongodb]$ ps -ef|grep mongod
falcon    2533  2271  0 08:21 pts/0    00:00:00 bin/mongod --dbpath=/home/falcon/m_data --logpath=/home/falcon/m_log --logappend
falcon    2541  2271  0 08:22 pts/0    00:00:00 grep mongod查看mongodb的端口是否启动,默认是28017,在启动服务器时,可以通过--port来指定  CODE:
[falcon@www.fwphp.cn  ~/mongodb]$ netstat -an -t|grep 28017
tcp        0      0 0.0.0.0:28017               0.0.0.0:*                   LISTEN到此,证明mongoDB已经启动完成
关闭的方法很简单:
Killall mongod 或者是  kill [pid]
使用方法:
        利用客户端程序mongo登录mongoDB  CODE:
[falcon@www.fwphp.cn  ~/mongodb]$ bin/mongo
MongoDB shell version: 1.2.4-
url: test
connecting to: test
type "help" for help
> help
HELP
        Show  dbs                     显示数据库名
        show  collections             显示当前数据库中的集合集
        show  users                   显示当前数据库的用户
        show  profile                显示最后系统用时大于1ms的系统概要
        use                 切换到数据库
        db.help()                    help on DB methods
        db.foo.help()                help on collection methods
        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
> show dbs   默认情况下有2数据库
admin
local
> use admin                切换到admin数据库
switched to db admin
> show collections                显示admin数据库下面的集合集
system.indexes下面我们来简单的新建集合集,插入、更新、查询数据,体验mongodb带给我们不一样的生活
新建数据库的方法是在
新建集合集:  CODE:
> db.createCollection("user");
{ "ok" : 1 }
> show collections
system.indexes
user
>查入数据:  CODE:
> db.user.insert({uid:1,username:"Falcon.C",age:25});
> db.user.insert({uid:2,username:"aabc",age:24});  查询数据:  CODE:
> db.user.find();
{ "_id" : ObjectId("4b81e74c1f0fd3b9545cba43"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }
{ "_id" : ObjectId("4b81e74d1f0fd3b9545cba44"), "uid" : 2, "username" : "aabc", "age" : 24 }查询数据的方式很丰富,有类似于SQL的条件查询,将会在以后的文档中详细介绍
如:我想查询uid为1的用户信息  CODE:
> db.user.find({uid:1});
{ "_id" : ObjectId("4b81e74c1f0fd3b9545cba43"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }等等,丰富的查询还有limit ,sort ,findOne,distinct等

更新数据:  CODE:
> db.user.update({uid:1},{$set:{age:26}})
> db.user.find();                        
{ "_id" : ObjectId("4b81e76f1f0fd3b9545cba45"), "uid" : 1, "username" : "Falcon.C", "age" : 26 }
{ "_id" : ObjectId("4b81e7701f0fd3b9545cba46"), "uid" : 2, "username" : "aabc", "age" : 24 }
> db.user.update({uid:1},{$inc:{age:-1}})
> db.user.find();                        
{ "_id" : ObjectId("4b81e76f1f0fd3b9545cba45"), "uid" : 1, "username" : "Falcon.C", "age" : 25 }
{ "_id" : ObjectId("4b81e7701f0fd3b9545cba46"), "uid" : 2, "username" : "aabc", "age" : 24 }
>出了以上的2种用法,更新的条件还有$unset、$push 、$pushAll 、$pop 、$pull 、$pullAll

以上就是MongoDB简单的使用介绍,在以后的文档中将会详细的介绍mongoDB非常酷的CURD方法,mongoDB的Replication及分布式

开发文档:http://www.mongodb.org/display/DOCS/Developer+Zone
管理文档:http://www.mongodb.org/display/DOCS/Admin+Zone
下载地址:http://www.mongodb.org/display/DOCS/Downloads

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84174-1-1.html 上篇帖子: 安装mongodb遇到的问题 下篇帖子: .net环境mongodb连接不释放,用单例实现连接,可行吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表