• 1. Mongodb培训文档
  • 2. Mongodb简介 mongo取自“humongous”(海量的),是开源的文档数据库──nosql数据库的一种。 MongoDB是一种面向集合(collection)的,模式自由的文档(document)数据库。 面向集合是说数据被分成集合的形式,每个集合在数据库中有惟一的名称,集合可以包含不限数目的文档。除了模式不是预先定义好的,集合与RDBMS中的表概念类似,虽然二者并不是完全对等。数据库和集合的创建是“lazy”的,即只有在第一个document被插入时集合和数据库才真正创建——这时在磁盘的文件系统里才能看见。 模式自由是说数据库不需要知道存放在集合中的文档的结构,完全可以在同一个集合中存放不同结构的文档,支持嵌入子文档。 文档类似于RDBMS中的记录以BSON的格式保存。BSON是Binary JSON的简称,是对JSON--like文档的二进制编码序列化。像JSON(JavaScript Object Notation)一样,BSON支持在对象和数组内嵌入其它的对象和数组。 BSON第一眼看上去像BLOB,但MongoDB理解BSON的内部机制,所以MongoDB可以深入BSON对象的内部,即使是嵌套的对象,这样MongoDB就可以在顶层和嵌套的BSON对象上建立索引来应对各种查询了。 MongoDB可运行在Linux、Windows和OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB为了提高性能使用了内存映射文件进行数据管理,而在32位模式运行时支持的最大文件为2GB。 MongoDB查询速度比MySQL要快,因为它cache了尽可能多的数据到RAM中,即使是non--cached数据也非常快。当前MongoDB官方支持的客户端API语言就多达8种(C|C++|Java|Javascript|Perl|PHP|Python|Ruby)
  • 3. Mongodb的术语介绍数据库、集合、文档 每个MongoDB服务器可以有多个数据库,每个数据库都有可选的安全认证。数据库包括一个或多个集合,集合以命名空间的形式组织在一起,用“.”隔开(类似于JAVA/Python里面的包),比如集合blog.posts和blog.authors都处于"blog"下,不会与bbs.authors有名称上的冲突。集合里的数据由多个BSON格式的文档对象组成,document的命名有一些限定,如字段名不能以"$"开头,不能有".",名称"_id"被保留为主键。 如果插入的文档没有提供“_id”字段,数据库会为文档自动生成一个ObjectId对象作为“_id”的值插入到集合中。字段“_id”的值可以是任意类型,只要能够保证惟一性。BSON ObjectID是一个12字节的值,包括4字节的时间戳,3字节的机器号,2字节的进程id以及3字节的自增计数。建议用户还是使用有意义的“_id”值。 MongoDb相比于传统的SQL关系型数据库,最大的不同在于它们的模式设计(Schema Design)上的差别,正是由于这一层次的差别衍生出其它各方面的不同。 如果将关系数据库简单理解为由数据库、表(table)、记录(record)三个层次概念组成,而在构建一个关系型数据库的时候,工作重点和难点都在数据库表的划分与组织上。一般而言,为了平衡提高存取效率与减少数据冗余之间的矛盾,设计的数据库表都会尽量满足所谓的第三范式。相应的,可以认为MongoDb由数据库、集合(collection)、文档对象(Document--oriented、BSON)三个层次组成。MongoDb里的collection可以理解为关系型数据库里的表,虽然二者并不完全对等。当然,不要期望collection会满足所谓的第三范式,因为它们根本就不在同一个概念讨论范围之内。类似于表由多条记录组成,集合也包含多个文档对象,虽然说一般情况下,同一个集合内的文档对象具有相同的格式定义,但这并不是必须的,即MongoDb的数据模式是自由的(schema--free、模式自由、无模式),collection中可以包含具有不同schema的文档记录,支持嵌入子文档。
  • 4. Mongodb的安装1.Mongodb的安装比较简单 1.创建mongodb用户 groupadd --g 6000 mongodb useradd --g mongodb --s /bin/bash --d /home/mongodb --m --u 6000 mongodb chown --R mongodb.mongodb /home/mongodb 2.安装mongodb cd /usr/local tar xzvf mongodb--linux--x86_64--1.8.3.tgz chown –R mongodb.mongodb /usr/local/mongodb--linux--x86_64--1.8.3 ln –s /usr/local/mongodb--linux--x86_64--1.8.3 mongodb su – mongodb vi .bash_profile 在.bash_profile文件中添加mongodb的环境变量 MONGODB=/usr/local/mongodb PATH=$PATH:$HOME/bin:$MONGODB/bin export MONGODB export PATH
  • 5. Mongodb的启动和登录1.Mongodb支持三种启动模式 1.single 2. master/slaver 3. replica set Single模式一般使用在开发环境中,数据没有备份 Master/slaver模式可以使用在生产环境,一般的启动方式是一个master多个slaver Replica set 模式是生产环境主要使用的启动方式,此方式具有数据备份,自由横行扩展,对应用访问透明
  • 6. Mongodb的启动和登录replica set 的典型配置
  • 7. Mongodb的启动和登录singnle启动 mongod --fork  --port 27017  --dbpath  /home/mongodb--single--data  --logpath /home/mongodb--single--data/mongodb.log   --logappend Master/slave启动 启动master mongod --fork  --master --oplogSize 2048 --port 5000  --dbpath  /home/master--slave/master  --logpath /home/master--slave/master/master.log   --logappend 启动slave mongod --fork  --slave --port 5001  --dbpath  /home/master--slave/slave  --logpath /home/master--slave/slave/slave.log   --logappend  --slavedelay 10 --autoresync 为slave添加master主机信息 mongo  --port 5001 --host 192.168.100.25 admin use local db.sources.find(); db.sources.insert({"host":"192.168.100.25:5000"});
  • 8. Mongodb的启动和登录replica set 启动 启动方式比较复杂 Mongodb登录 mongo [options] [db address] [file names (ending in .js)] 例如 mongo  --port 27017 –host 192.168.100.25 admin –u –p admin
  • 9. Mongodb的客户端Mongodb可以的客户端比较多 mongodbHUB Phpmoadmin Mongo3 集群管理工具 RockMongo 比较好用的是 RockMongo 测试环境访问地址 www.rockmongodb.com 192.168.100.99 http://www.rockmongodb.com:9999
  • 10. Mongodb的索引Mongodb的索引是其查询速度的保证 1.索引建立命令 db.person.ensureIndex({firstname: 1, lastname: 1}, {unique: true, dropDups: true}); 2.查看索引 Db.person.getIndexes(); 索引类型 1.单列索引 2.组合索引 3文档索引 4.内嵌文档列索引 5.唯一索引
  • 11. Mongodb的索引Mongodb的索引是其查询速度的保证 1.索引建立命令 db.person.ensureIndex({firstname: 1, lastname: 1}, {unique: true, dropDups: true}, {"background" : true}); 2.删除索引 db.users.dropIndex(name) db.users.dropIndexes() 3.查看索引 Db.person.getIndexes(); 索引类型 1.单列索引 2.组合索引 3文档索引 4.内嵌文档列索引 5.唯一索引
  • 12. Mongodb的常用命令1.Mongodb的命令通过shell执行,shell本身就是一个javascript的解析器 例如 function factorial (n) { ... if (n <= 1) return 1; ... return n * factorial(n - 1); ... } > factorial(5); 120 常用命令 Use dbname 切换数据 Show dbs 显示数据库 Db 显示当前使用的数据库 Show collections 显示所有的collection
  • 13. Mongodb的常用命令Help() 此命令是最有用的命令 演示 Db.help(); Db.users.help(); 演示主要的查询命令 http://www.cnblogs.com/silentcross/archive/2011/07/04/2095424.html
  • 14. Mongodb的java调用Mongodb提供了java驱动 mongodb-java 第三方框架morphia 是在mongodb-java基础上开发的ORM框架 1.Morphia 的Annotations Morphia通过一些特定的Annotations来定义对象和document的对应关系 主要的annotaitons Entity 将pojo映射成collection Indexes 标记字段别索引 组合索引 Id 主键 Transient Serialized Indexed Reference 引用对象 Embedded 内嵌对象 @PrePersist – 在pojod保存成DBObject之前调用 @PostPersist –在pojod保存成DBObject之后调用 @PreLoad – 在DBObject映射成POJO前调用 @PostLoad – 在DBObject映射成POJO后调用
  • 15. Mongodb的java调用Morhpia的主要接口 Datastore Interface Query Interface