[MongoDB]MongoDB学习

MongoDB是一个基于分布式文件存储的数据库。

NoSQL简介

1.     Not Only SQL,不仅仅是SQL:非关系型数据库

2.     关系数据库管理系统RDMBSs

3.     关系型数据库遵循ACID规则:

a)       A (Atomicity) 原子性

b)       C (Consistency) 一致性

c)       I (Isolation) 独立性

d)       D (Durability) 持久性

4.      事务 transaction

5.     分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。

因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。

RDBMS vs NoSQL

RDBMS 
-
高度组织化结构化数据 
-
结构化查询语言(SQL (SQL) 
-
数据和关系都存储在单独的表中。 
-
数据操纵语言,数据定义语言 
-
严格的一致性
-
基础事务

NoSQL 
-
代表着不仅仅是SQL
-
没有声明性查询语言
-
没有预定义的模式
-
- 值对存储,列存储,文档存储,图形数据库
-
最终一致性,而非ACID属性
-
非结构化和不可预知的数据
- CAP
定理 
-
高性能,高可用性和可伸缩性

6.      CAP定理(CAPtheorem)

a)       一致性(Consistency)所有节点再同一时间具有相同的数据

b)       可用性(Availiability)保证每个请求不管成功或者失败都有响应

c)       分隔容忍(Partitiontolerance)系统中任意信息的丢失或失败不会影响系统的继续运作。

[MongoDB]MongoDB学习_第1张图片

7.      BASE:Basically Available,Soft-state,EventuallyConsistent。

a)       基本可用

b)       软状态/柔性事务(无连接)

c)       最终一致性

MongoDB简介

1.      将数据存储为一个文档,数据结构由键值对组成(key=>value),类似于JSON对象,字段值可以包含其他文档,数组,及文档数组。

[MongoDB]MongoDB学习_第2张图片

2.      主要特点:

a)       可在记录中设置任何属性的索引来实现更快排序

b)       扩展性

c)       分片

d)       更容易查询文档中内嵌的对象和数组

e)       Update()可以实现替换完成的文档或者一些指定的数据字段

f)        Map/reduce主要是用来对数据进行批量处理和聚合操作

g)       Map函数调用emit(key,value)便利所有记录,将key,value传给Reduce进行处理

h)       可以通过db.runCommand或mapreduce命令来执行MapReduce操作

i)        GridFS可以用于存放大量小文件

j)        允许在服务端执行脚本,可以用JS编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务点,下次直接调用

k)       支持各种编程语言,安装简单

3.      Mongodb工具

a)       监控

                    i.           Munin:网络和系统监控工具

                   ii.           Gangila:mongodb高性能的系统监视的工具

                 iii.           Cacti:基于图形界面的开源工具,查看CPU负载,网络带宽利用率

MongoDB概念解析

1.      文档,集合,数据库

[MongoDB]MongoDB学习_第3张图片

2.     数据库:

a)       一个mongodb可以建立多个数据库,默认为db,单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同数据库放置在不同的文件中。

3.     文档

a)       键值对,不需要设置相同的字段,相同的字段不需要相同的数据类型

b)       键值对有序

c)       文档中的值不仅是字符串,还可以是其它数据类型甚至嵌入的文档

d)       区分大小写和类型,不能有重复的键

e)       键命名不能空字符,$符号特定情况下使用,下划线开头的键是保留的。

[MongoDB]MongoDB学习_第4张图片

4.      集合:Mongo的文档组,相当于table,没有固定结构,可以插入不同格式和类型的数据,

a)       集合名不能是空字符串,不能含有空字符串,不能以system.开头,不能含有保留自负

b)       Capped collections:固定大小的集合

                    i.           高性能,队列过期的特性

                   ii.           高性能自动的维护对象的插入顺序,适合类似记录日志的功能,必须显示创建,指定一个集合的大小,单位为字节,数据存储空间值提前分配。

                 iii.           能添加新的对象,能进行更新,然而对象不会增加存储空间,如果增加就会失败,

                 iv.           不允许删除,使用drop()删除集合所有的行,删除后必须显示地重新创建这个collection

5.  db.createCollection("mycoll", {capped:true, size:100000})

6.     元数据

MongoDB创建数据库

1.      use 创建数据库

2.      db.dropDatabase() 删除数据库

3.      db.collection.drop() 删除集合

4.      db.COLLECTION_NAME.insert(document) 使用insert()或save() 向集合中插入文档。插入文档你也可以使用db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。也可以用变量

变量名=(。。。)

5.      db.COLLECTION_NAME.find()查看已插入文档

6.      update()和save()更新文档

db.collection.update(

,        //update的查询条件,类似sql update查询内where后面的。

,       //update的对象和一些更新的操作符

{

Upsert:,   如果不存在是否插入

Multi:,      第一条false  全部 true

WriteConcern:

}

)

Save()方法,通过传入的文档来替换。

db.collection.save(

   ,

   {

     writeConcern:

   }

)

Inc   set

 

 

7.删除文档   db.collection.remove{,}

       db.collection.remove(

   ,

   {

     justOne: ,         true 只删除一个文档

     writeConcern:

   }

)

删除所有数据 db.col.remove({})   类似SQL的truncate命令

7.      查询文档db.collectionname.find().pretty()    findOne() 返回一个文档

[MongoDB]MongoDB学习_第5张图片

传入多个key用逗号隔开 相当于AND条件

Db.col.find(   {$or:[{     条件    } ]  }   )

8.      MongoDB 条件操作符

a)       大于 $gt

b)       小于 $lt

c)       大于等于 $gte

d)       小于等于 $lte

e)       不等于 $ne

9.      $type操作符,用来匹配的,具体查表

10.   db.COLLECTION_NAME.find().limit(NUMBER)      接受数字参数指定读取指定数量的数据记录

11.   skip(number) 跳过几条

12.   MongoDB排序:db.COLLECTION_NAME.find().sort({KEY:1})      1为升序,-1为降序

13.   MongoDB索引,极大提高效率,接受可选参数

a)       db.COLLECTION_NAME.ensureIndex({KEY:1})

b)       后台创建索引db.values.ensureIndex({open: 1,close: 1}, {background: true})

14.   MongoDB聚合

a)       Db.collection_name.aggregate(操作)

 [MongoDB]MongoDB学习_第6张图片

b)       管道的概念:用于将当前命令的输出结果作为下一个命令的参数。管道操作可以重复,表达式无状态。

c)       聚合框架几个常用的操作

                    i.           $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。

                   ii.           $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。

                 iii.           $limit:用来限制MongoDB聚合管道返回的文档数。

                 iv.           $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。

                   v.           $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

                 vi.           $group:将集合中的文档分组,可用于统计结果。

                vii.           $sort:将输入文档排序后输出。

               viii.           $geoNear:输出接近某一地理位置的有序文档。

15.   MongoDB复制:将数据同步在多个服务器的过程。

a)      从主节点读取数据和写入数据,主节点与从节点进行数据交互。这个还是挺难的感觉

16.  MongoDB分片

a)       没看懂啊

17.   MongoDB备份(mongodump)与恢复(mongorestore)

a)       备份语法 mongodump –h dbhost –d dbname  -o dbdirectory

                    i.           –h:mongodb所在服务器地址,例如127.0.0.1,或者指定端口号127.0.0.1:27017

                   ii.           –d 需要备份的数据库实例

                 iii.           –O 备份的数据存放位置,需要提前建立

                 iv.           有一些可选参数

b)       MongoDB数据恢复

                    i.           Mongorestore –h <:port> -d dbname

1.       –host<:port>,-h<:port>   mongodb所在服务器地址,默认localhost:27017

2.       –db.-d:需要恢复的数据库实例

3.       –drop:会先删除当前数据再恢复备份的数据

4.        最后一个参数,设置备份数据所在文职,

5.       –dir 指定备份的目录  不能同时指定path和dir

18.   MongoDB 监控   数据的意义

a)       Mongostat命令

b)       Mongotop   可以带参数,等待的时间长度,秒为单位

                    i.           –locks  报告每个数据库的锁的使用中

 

 

 

 

MongoDB高级教程

1.MongoDB关系:文档间可以通过嵌入和引用来建立联系。

        a)嵌入式关系:缺点是如果用户和用户地址不断增加,数据量不断变大,会影响读写性能。

        b)引用式关系:把用户数据文档和用户地址数据文档分开,通过引用文档id字段来建立关系,

2.MongoDB数据库引用

       A)手动引用(ManualReferences)

       B)DBRefs

              I.{$ref集合名称 :,$id引用的id :, $db数据库名称,可选参数 :}

3.MongoDB覆盖索引查询:所有的查询字段是索引的一部分,所有的查询返回字段在同一个索引中

       A)

             

       

你可能感兴趣的:(MongoDB)