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

[经验分享] MongoDB详解(一)

[复制链接]

尚未签到

发表于 2018-10-24 12:35:03 | 显示全部楼层 |阅读模式
一、NoSQL简介
  NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

1、RDBMS的ACID
  原子性:(Atomicity)事务里的所有操作要么全部做完,要么都不做,只要有一个操作失败,整个事务就失败,需要回滚。//例如银行取钱,A转账给B 100。第一步从A账户取出100,第二步B账户加100必须。两个操作要么完成,要么失败。
  一致性:(Consistency)事务的运行不会改变数据库原本的一致性约束。例如A+B的账户共有1000元,不管怎么转账,这个综合不会变。
  隔离性:(Isolation)在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
  持久性:(Durability) 持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

2、CAP定理
  在计算机科学中, CAP定理(CAP theorem),又被称作 布鲁尔定理(Brewer's theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
  一致性(Consistency):分布式系统中,一个数据往往会存在多份。不管在哪一个节点,访问到的必须是最新的副本数据
  可用性(Availability):保证每个请求不管成功或者失败都有响应,具备高可用特性
  分隔容忍(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运作,在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
  CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
  CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
  CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
  AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。
  图1:
DSC0000.jpg

  CAP:一致性,可用性,Partition tolerance[分区容错性] //分布式集群中需要考虑的
  单机上的mysql实现了CA
  分布式FS:最多满足两个,AP,但是保证最终一致性。
  最终一致性细分:
  因果一致性
  读自己写一致性//读自己写的数据是一致的。
  会话一致性//在会话范围内时一致的
  单调读一致性 //在以后读取,不会读取新的版本,而是刚才读的版本
  时间轴一致性 //限制更新操作,应用顺序必须一致。
  ..
  ACID:强一致性,隔离性,采用保守牢靠的方法,难以变化
  BASE:弱一致性,可用性优先,采用乐观的方法,适应变化,更简单,更快
  数据一致性的实现技术:
  NRW: N:数据所有副本数,R:完成读操作最少需要涉及的副本数。
  R+W>N:强一致性
  R+W《N:弱一致
  2PC:两段式提交
  请求节点,每一个参与者都准备好,然后才能提交。
  Paxos基于消息传递的一致性算法
  如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态。
  为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。
  Vector Clock:向量时钟

3、BASE理论
  BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。
  基本可用(Basically Available):允许损失部分可用性,保证核心可用 //电商抢购界面,降级用户到降级界面
  软状态( Soft State):允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。
  最终一致性( Eventual Consistency):所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

4、RDBMS和NoSQL
  

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

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

5、ACID对比BASE
  图2:
DSC0001.jpg


6、NoSQL数据库分类
  图3:
DSC0002.jpg

  数据存储模型:http://www.nosql-database.org/
  主要模型:   
  列式存储模型:
  行和列存储,不支持表的链接查询。早期的RDB是基于行存储的
  文档存储:
  MongoDB就是文档存储。
  key value/对模型
  图式数据模型
  离散数学。图,例如陌陌搜索周边的人。
  列式模型:
  //列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。
  应用场景:在分布式fs上提供支持随机读写的。分布式数据存储。
  常见方案:hadoop/Hbase,Hypertable,Cassandra无中心节点,Clouddata,IBM infomix
  数据模型:以“列”为中心进行存储,将同一列数据存储在一起
  优点:快速查询、数据压缩比高。可扩展性强。易于实现分布式扩展
  缺点:不适合数据变化比较大的场景,
  文档模型:
  //文档存储以封包键值对的方式进行存储,利用存储引擎的能力将不同的文档划分成不同的集合,以管理数据
  应用场景:常用于非强事务需要的web应用。
  mysql支持事务,mongodb不支持跨表事务。
  典型产品:MongoDB,Elastic,Couchbase server,IBM CouchDB
  数据模型:文档存储,每一行即为一个文档key value模型,文档和文件是两个概念
  优点:数据模型无需事先定义。
  键值模型:
  应用场景:内容缓存,用于大量并行数据访问的高负载场景
  典型产品:Redis,DvnamoDB,Riak,MemcacheDB
  数据模型:基于hash表生成key-value
  优点:查找速度快
  图式模型:
  应用场景:社交网路、推荐系统、关系图谱
  典型产品:Neo4J,TITAN,Infinite Graph
  数据模型:图式结构
  优点:适用于图式计算场景

7、NoSQL的优缺点
  NoSQL数据库系统:非关系模型、分布式、不支持ACID数据库设计范式的数据库管理系统。
  简单数据模型:键值对存储
  元数据和数据分离
  弱一致性,最终一致性
  高吞吐量:
  高水平扩展能力和低端硬件集群
  缺点:
  没有经过科学的验证。
  不支持ACID,不能保证严格的事务能力
  功能简单,更复杂的存储模型,需要另外设计
  没有统一的查询语言。各自有各自的流派,各自有专用的查询语句

8、NewSQL
  主要包括两类:
  拥有关系型数据库产品和服务,并将关系模型的好处带到分布式架构上;
  或者提高关系数据库的性能,使之达到不用考虑水平扩展问题的程度。
  NewSQL是对所有新型可扩展、高性能数据库的简称,它们不仅有NoSQL对海量数据库的存储管理能力,还保持了传统数据库支持ACID和SQL等特性
  NewSQL能够结合传统关系型数据库和NoSQL的优势,且容易横向扩展,这是数据库发展的必然方向。
  PostgreSQL正当时,跻身数据库排名前五
  单机的SQL扩展到多机
  前一类NewSQL包括Clustrix、GenieDB、ScalArc、ScaleBase、NimbusDB,也包括带有NDB的MySQL集群、Drizzle等。
  后一类NewSQL包括Tokutek、JustOne DB。还有一些"NewSQL即服务",包括Amazon的关系数据库服务、Microsoft的SQL Azure、FathomDB等。

二、MongDB简介
  MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
  在高负载的情况下,添加更多的节点,可以保证服务器性能。
  MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,
  图2.1
DSC0003.jpg

  RDBMS功能强悍,但是扩展性差
  memcahced,Key/values store:扩展性相对好,但是功能单一
  mongoDB:兼具功能丰富和扩展性高。

1、特点:
  

海量数据存储  
文档存储  //使用JSON(BSON)
  
schema free
  
性能:C++/开源/全文索引支持
  
不支持事务,但支持原子操作
  
内存映射的文件:延迟写
  
扩展性:强大的复制功能/自动分片
  
商业支持:大量文档
  

  
基于文档查询:是JSON格式查询
  
Map/reduce支持:支持MR//查询可以实现所有分片上并行。
  
GridFS:分布式fs,可以存储任何大小的文件
  
空间索引:基于位置索引
  
生产环境应用广泛。
  
全文索引:包括内置对象和嵌入数组
  
支持副本和故障转移
  
能够存储包括photos、vides等二进制数据
  

2、适用场景:
  适用于:
  webstites
  Caching
  High volume,low value
  High scalability
  Storage of program objects and json
  不适用于:
  事务高
  商业智能
  SQL接口需求

3、GridFS
  GridFS是Mongo的一个子模块,使用GridFS可以基于MongoDB来持久存储文件。并且支持分布式应用(文件分布存储和读取)。作为MongoDB中二进制数据存储在数据库中的解决方案,通常用来处理大文件,对于MongoDB的BSON格式的数据(文档)存储有尺寸限制,最大为16M。但是在实际系统开发中,上传的图片或者文件可能尺寸会很大,此时我们可以借用GridFS来辅助管理这些文件。
  GridFS是一种将大型文件存储在MongoDB中的文件规范,官方支持的驱动均实现了GridFS规范。GridFS制定大文件在数据库中如何处理,通过开发语言驱动来完成、通过API接口来存储检索大文件。
  使用场景:
  1.单个文件系统单个目录中存储的file数量有限,想存储更多的文件
  2.读取大文件的部分信息(加载到内存)而不需要加载整个文件到内存
  3.需要文件和元数据自动同步并部署到多个系统和设施
  存储原理:
  GridFS使用两个集合(collection)存储文件:
  chunks:存储文件内容的二进制数据
  files:存储文件的元数据
  GridFS将两个集合放在一个普通的buket中,并且这两个集合使用buket的名字作为前缀。MongoDB的GridFs默认使用fs命名的buket存放两个文件集合。因此存储文件的两个集合分别会命名为集合fs.files ,集合fs.chunks。
  也可以定义不同的buket名字,一个数据库中也可定义多个bukets,但所有的集合的名字都不得超过mongoDB命名空间的限制。
  MongoDB集合的命名包括了数据库名字与集合名字,会将数据库名与集合名通过“.”分隔(eg:[database].[collection])。而且命名的最大长度不得超过120bytes。
  文件存储到GridFS,如果文件大于chunksize(每个chunk块大小为256KB),会先按照大小分割成多个chunk,chunk块的信息存储在fs.chunks集合的多个文档中。然后将文件信息存储在fs.files集合的唯一一份文档中。其中fs.chunks集合中多个文档中的file_id字段对应fs.files集中文档”_id”字段。
  读文件时,先根据查询条件在files集合中找到对应的文档,同时得到“_id”字段,再根据“_id”在chunks集合中查询所有“files_id”等于“_id”的文档。最后根据“n”字段顺序读取chunk的“data”字段数据,还原文件。
  存储过程:
  图2.2
DSC0004.jpg

  fs.files 集合存储文件的元数据,以类json格式文档形式存储。每在GridFS存储一个文件,则会在fs.files集合中对应生成一个文档。
  fs.files集合中文档的存储内容:
  图2.3
DSC0005.jpg

  fs.chunks 集合存储文件文件内容的二进制数据,以类json格式文档形式存储。每在GridFS存储一个文件,GridFS就会将文件内容按照chunksize大小(chunk容量为256k)分成多个文件块,然后将文件块按照类json格式存在.chunks集合中,每个文件块对应fs.chunk集合中一个文档。一个存储文件会对应一到多个chunk文档。
  fs.chunks集合中文档的存储内容如下:
  图2.4
DSC0006.jpg

  为了提高检索速度 MongoDB为GridFS的两个集合建立了索引。fs.files集合使用是“filename”与“uploadDate” 字段作为唯一、复合索引。fs.chunk集合使用的是“files_id”与“n”字段作为唯一、复合索引。
  使用GridFS: //mingofiles命令来操作GridFS。其实有四个主要命令,分别为:
  put —存储命令
  get —获取命令
  list —列表命令
  delete —删除命令
  MongoDB支持多种编程语言驱动。比如c、java、C#、nodeJs等。因此可以使用这些语言MongoDB驱动API操作,扩展GridFS。
  备注:
  GridFs不会自动处理md5值相同的文件,同一个文件进行put两次,会在GridFS中存储不同的两份,这是一种浪费。对于md5相同的文件,如果想要在GridFS中只有一个存储,需要通过API进行扩展处理。
  MongoDB 不会释放已经占用的硬盘空间。即使删除db中的集合 MongoDB也不会释放磁盘空间。同样,如果使用GridFS存储文件,从GridFS存储中删除无用的垃圾文件,MongoDB依然不会释放磁盘空间的。这会造成磁盘一直在消耗,而无法回收利用的问题。
  释放空间的方法
  1.在mongo shell中运行db.repairDatabase()命令或者db.runCommand({ repairDatabase: 1 })命令。(此命令执行比较慢)。
  待修复磁盘的剩余空间必须大于存储数据集占用空间的加上2G,否则可能修复失败。//修复过程类似于硬盘的碎片整理
  2.使用dump & restore方式,先删除mongoDB数据库中需要清除的数据,然后使用mongodump备份数据库。备份完成后,删除MongoDB的数据库,使用Mongorestore工具恢复备份数据到数据库。
  当使用db.repairDatabase()命令没有足够的磁盘剩余空间时,可以采用dump & restore方式回收磁盘资源。如果MongoDB是副本集模式,dump & restore方式可以做到对外持续服务,在不影响MongoDB正常使用下回收磁盘资源。
  MogonDB使用副本集, 实践使用dump & restore方式,回收磁盘资源。70G的数据在2小时之内完成数据清理及磁盘回收,并且整个过程不影响MongoDB对外服务,同时可以保证处理过程中数据库增量数据的完整。

4、安装和启动
  配置yum源:
  https://mirrors.aliyun.com/mongodb/yum/redhat/6Server/mongodb-org/3.6/x86_64/
  安装:
  yum install mongodb-org-server mongodb-org-shell mongodb-org-tools
  https://www.mongodb.com/download-center#community  //下载源码包安装
  配置文件:
  vim /etc/mongod.conf
  

[root@node1 mogdb]# mkdir -pv /mongodb/data  
[root@node1 mogdb]# chown -R mongod.mongod /mongodb/
  
vim /etc/mongod.conf
  dbPath: /mongodb/data
  port: 27017
  
#  bindIp: 127.0.0.1    //注释,将监听所有接口
  

  
yum安装生成的主要文件有://CentOS6安装的mongodb 3.6.4
  
/etc/init.d/mongod
  
/etc/mongod.conf
  
/etc/sysconfig/mongod
  
/var/log/mongodb/mongod.log
  
/var/run/mongodb
  
生成的命令:/usr/bin/
  
mongos  mongod  mongo   bsondump    install_compass
  
mongodump   mongoexport mongofiles  mongoimport
  
mongoperf   mongorestore    mongostat   mongotop
  

5、mongo的基本概念
  数据库:文档:集合
  图2.5
DSC0007.jpg

  直观了解:
  图2.6
DSC0008.jpg


6、数据库
  一个mongodb可以建立多个数据库。
  MongoDB的默认数据库为"test",该数据库存储在data目录中。
  "show dbs" 命令可以显示所有数据的列表。
  "db"查看当前在用db
  "use"切换db
  

数据库名可以是满足以下条件的任意UTF-8字符串。  不能是空字符串("")。
  不得含有' '(空格)、.、$、/、\和\0 (空字符)。
  应全部小写。
  最多64字节。
  
注:有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
  admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
  

7、文档:一组键值(key-value)对(即BSON)
  {"site":"www.runoob.com", "name":"菜鸟教程"}
  MongoDB和RDBMS的对应关系
  图2.7
DSC0009.jpg

  需要注意的是:
  文档中的键/值对是有序的。
  文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  MongoDB区分类型和大小写。
  MongoDB的文档不能有重复的键。
  文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
  文档键命名规范:
  键不能含有\0 (空字符)。这个字符用来表示键的结尾。
  .和$有特别的意义,只有在特定环境下才能使用。
  以下划线"_"开头的键是保留的(不是严格要求的)。

8、集合
  集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
  集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
  比如,我们可以将以下不同数据结构的文档插入到集合中:
  {"site":"www.baidu.com"}
  {"site":"www.google.com","name":"Google"}
  {"site":"www.runoob.com","name":"菜鸟教程","num":5}
  合法的集合名:
  集合名不能是空字符串""。
  集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
  集合名不能以"system."开头,这是为系统集合保留的前缀。
  用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。 

9、capped collections
  Capped collections 就是固定大小的collection。
  它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。
  Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 和标准的collection不同,你必须要显式的创建一个capped collection, 指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的。
  要注意的是指定的存储大小包含了数据库的头信息。

  db.createCollection("mycoll", {capped:true,>  在capped collection中,你能添加新的对象。
  能进行更新,然而,对象不会增加存储空间。如果增加,更新就会失败 。
  数据库不允许进行删除。使用drop()方法删除collection所有的行。
  注意: 删除之后,你必须显式的重新创建这个collection。
  在32bit机器中,capped collection最大存储为1e9( 1X109)个字节。

10、元数据
  数据库的信息是存储在集合中。它们使用了系统的命名空间:
  dbname.system.*
  图2.8
DSC00010.jpg

  对于修改系统集合中的对象有如下限制。
  在{{system.indexes}}插入数据,可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。
  {{system.users}}是可修改的。 {{system.profile}}是可删除的。

三、MongoDB其他概念

1、MongoDB的数据类型
  图3.1
DSC00011.jpg

DSC00012.jpg

  重要的几个数据类型:
  ObjectId
  ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:
  前 4 个字节表示创建 unix时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时
  接下来的 3 个字节是机器标识码

  紧接的两个字节由进程>  最后三个字节是随机数
  图3.3
DSC00013.jpg

  MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象
  由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间:

  var newObject = ObjectId()
  newObject.getTimestamp()
  ISODate("2018-04-22T15:00:43Z")
  newObject.str     //转换为字符串
  5adca39b0ea27e685086ab91

  字符串
  BSON 字符串都是 UTF-8 编码。
  时间戳
  BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。其中:
  前32位是一个 time_t 值(与Unix新纪元相差的秒数)
  后32位是在某秒中操作的一个递增的序数
  在单个 mongod 实例中,时间戳值通常是唯一的。
  在复制集中, oplog 有一个 ts 字段。这个字段中的值使用BSON时间戳表示了操作时间。
  BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。
  日期
  表示当前距离 Unix新纪元(1970年1月1日)的毫秒数。日期类型是有符号的, 负数表示 1970 年之前的日期。
  

> var t1 = Date()  
> t1
  
Sun Apr 22 2018 23:04:46 GMT+0800 (CST)
  
> var t2 = new Date()   //格林尼治时间
  
> t2
  
ISODate("2018-04-22T15:05:01.385Z")
  
> typeof t1
  
string
  
> typeof t2
  
object
  

  
> var t3 = ISODate() //格林尼治时间
  
> t3
  
ISODate("2018-04-22T15:06:32.645Z")
  
> typeof t3
  
object
  

  
这样创建的时间是日期类型,可以使用 JS 中的 Date 类型的方法。
  
返回一个时间类型的字符串:
  

  
> Date()
  
Sun Apr 22 2018 23:08:22 GMT+0800 (CST)
  

  
> t3
  
ISODate("2018-04-22T15:06:32.645Z")
  
> typeof t3
  
object
  
> var t33 = t3.toString()  //类型转换
  
> t33
  
Sun Apr 22 2018 23:06:32 GMT+0800 (CST)
  
> typeof t33
  
string
  

2、MongoDB连接
  mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  mongodb:// 这是固定的格式,必须要指定。
  username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
  host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
  portX 可选的指定端口,如果不填,默认为27017
  /database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。
  ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
  [root@localhost ~]# mongo mongodb://192.168.154.132:27017/col  //使用用户名和密码连接登陆到指定数据库
  [root@localhost ~]# mongo mongodb://admin:123456@localhost/  //使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上
  mongodb://localhost,localhost:27018,localhost:27019  //连接 replica set 三台服务器 (端口 27017, 27018, 和27019):
  mongodb://host1,host2,host3/?slaveOk=true //连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器。
  mongodb://host1,host2,host3/?connect=direct;slaveOk=true //直接连接第一个服务器,无论是replica set一部分或者主服务器或者从服务器。
  mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000 //以安全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒。
  参数说明:
DSC00014.jpg

  参考博客:
  http://www.mongodb.org.cn/manual/  //中文文档
  https://docs.mongodb.com/manual/  //英文官方
  https://www.yiibai.com/mongodb/  //其他教程
  https://www.mongodb.com/download-center#community  //下载地址
  http://www.runoob.com/mongodb/mongodb-tutorial.html  //学习地址
  https://db-engines.com/en/ranking   //数据库排行榜
  http://rdc.hundsun.com/portal/article/703.html  //部分摘录



运维网声明 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-625935-1-1.html 上篇帖子: 未加密的MongoDB数据库暴露成千上万Bezop代币投资者的个人信息 下篇帖子: MongoDB安装部署及基本操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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