MongoDB 是什么?看完你就知道了

2024-05-16

1. MongoDB 是什么?看完你就知道了

 点击上方 蓝色字体 ,选择“置顶公众号”
   优质文章,第一时间送达
      链接 | blog.csdn.net/hayre/article/details/80628431
   1.MongoDB是什么?用一句话总结
   MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库。
   
   (1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。
   使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。
   (2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
   (3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。
   3.主要特性
    (1)文档数据类型 
   SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。 (2)即时查询能力 
   MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。 (3)复制能力 
   MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。 (4)速度与持久性 
   MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。
   MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据操作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。
    (5)数据扩展 
   MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。
   
   MongoDB核心服务器主要是通过mongod程序启动的,而且在启动时不需对MongoDB使用的内存进行配置,因为其设计哲学是内存管理最好是交给操作系统,缺少内存配置是MongoDB的设计亮点,另外,还可通过mongos路由服务器使用分片功能。
   MongoDB的主要客户端是可以交互的js shell 通过mongo启动,使用js shell能使用js直接与MongoDB进行交流,像使用sql语句查询mysql数据一样使用js语法查询MongoDB的数据,另外还提供了各种语言的驱动包,方便各种语言的接入。
   
   mongodump和mongorestore,备份和恢复数据库的标准工具。输出BSON格式,迁移数据库。
   mongoexport和mongoimport,用来导入导出JSON、CSV和TSV数据,数据需要支持多格式时有用。mongoimport还能用与大数据集的初始导入,但是在导入前顺便还要注意一下,为了能充分利用好mongoDB通常需要对数据模型做一些调整。
   mongosniff,网络嗅探工具,用来观察发送到数据库的操作。基本就是把网络上传输的BSON转换为易于人们阅读的shell语句。
   因此,可以总结得到,MongoDB结合键值存储和关系数据库的最好特性。因为简单,所以数据极快,而且相对容易伸缩还提供复杂查询机制的数据库。MongoDB需要跑在64位的服务器上面,且最好单独部署,因为是数据库,所以也需要对其进行热备、冷备处理。
   
   因为本篇文章不是API手册,所有这里对shell的使用也是基础的介绍什么功能可以用什么语句,主要是为了展示使用MongoDB shell的方便性,如果需要知道具体的MongoDB shell语法可以查阅官方文档。
   
   创建数据库并不是必须的操作,数据库与集合只有在第一次插入文档时才会被创建,与对数据的动态处理方式是一致的。简化并加速开发过程,而且有利于动态分配命名空间。如果担心数据库或集合被意外创建,可以开启严格模式。
   
   
   
   
   
   
   以上的命令只是简单实例,假设如果你之前没有学习过任何数据库语法,同时开始学sql查询语法和MongoDB 查询语法,你会发现哪一个更简单呢?如果你使用的是java驱动去操作MongoDB,你会发现任何的查询都像Hibernate提供出来的查询方式一样,只要构建好一个查询条件对象,便能轻松查询(接下来会给出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成没问题,也正因为这样简洁,完善的查询机制,深深的爱上了MongoDB。
   
   使用java驱动链接MongoDB是一件非常简单的事情,简单的引用,简单的做增删改查。在使用完java驱动后我才发现spring 对MongoDB 的封装还不如官方自身提供出来的东西好用,下面简单的展示一下使用。
   
   
   
   
   这里只举例了简单的链接与简单的MongoDB操作,可见其操作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。
   插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。
   
   要清楚了解MongoDB的基本数据单元。在关系型数据库中有带列和行的数据表。而MongoDB数据的基本单元是BSON文档,在键值中有指向不定类型值的键,MongoDB拥有即时查询,但不支持联结操作,简单的键值存储只能根据单个键来获取值,不支持事务,但支持多种原子更新操作。
   
   如读写比是怎样的,需要何种查询,数据是如何更新的,会不会存在什么并发问题,数据结构化的程度是要求高还是低。系统本身的需求决定mysql还是MongoDB。
   
   在关于schema 的设计中要注意一些原则,比如:
   
   数据库是集合的逻辑与物理分组,MongoDB没有提供创建数据库的语法,只有在插入集合时,数据库才开始建立。创建数据库后会在磁盘分配一组数据文件,所有集合、索引和数据库的其他元数据都保存在这些文件中,查阅数据库使用磁盘状态可通过。
     集合是结构上或概念上相似得文档的容器,集合的名称可以包含数字、字母或 . 符号,但必须以字母或数字开头,完全。
   限定集合名不能超过128个字符,实际上 . 符号在集合中很有用,能提供某种虚拟命名空间,这是一种组织上的原则,和其他集合是一视同仁的。在集合中可以使用。
     其次是键值,在MongoDB里面所有的字符串都是UTF-8类型。数字类型包括double、int、long。日期类型都是UTC格式,所以在MongoDB里面看到的时间会比北京时间慢8小时。整个文档大小会限制在16m以内,因为这样可以防止创建难看的数据类型,且小文档可以提升性能,批量插入文档理想数字范围是10~200,大小不能超过16MB。
   
   (2)解析查询时MongoDB通过最优计划选择一个索引进行查询,当没有最适合索引时,会先不同的使用各个索引进行查询,最终选出一个最优索引做查询
   (3)如果有一个a-b的复合索引,那么仅针对a的索引是冗余的
   (4)复合索引里的键的顺序是很重要的
   
   (2)复合索引
   (3)唯一性索引
   (4)稀疏索引
   如索引的字段会出现的值,或是大量文档都不包含被索引的键。
   如果数据集很大时,构建索引将会花费很长的时间,且会影响程序性能,可通过
   当使用 mongorestore 时会重新构建索引。当曾经执行过大规模的删除时,可使用
   对索引进行压缩,重建。
   
   (1)查阅慢查询日志
   (2)分析慢查询
   注意新版本的MongoDB 的explain方法是需要参数的,不然只显示普通的信息。
   
   本节同样主要简单呈现MongoDB副本集搭建的简易性,与副本集的强壮性,监控容易性
   
   提供主从复制能力,热备能力,故障转移能力
   
   
   
   实际上MongoDB对副本集的操作跟mysql主从操作是差不多的,先看一下mysql的主从数据流动过程
   而MongoDB主要依赖的日志文件是oplog
   写操作先被记录下来,添加到主节点的oplog里。与此同时,所有从结点复制oplog。首先,查看自己oplog里最后一条的时间戳;其次,查询主节点oplog里所有大于此时间戳的条目;最后,把那些条目添加到自己的oplog里并应用到自己的库里。从节点使用长轮询立即应用来自主结点oplog的新条目。
   当遇到以下情况,从节点会停止复制
   local数据库保存了所有副本集元素据和oplog日志
   可以使用以下命令查看复制情况
   
   每个副本集成员每秒钟ping一次其他所有成员,可以通过rs.status看到节点上次的心跳检测时间戳和 健康 状况。
   
   这个点没必要过多描述,但是有一个特殊场景,如果从节点和仲裁节点都被杀了,只剩下主节点,他会把自己降级成为从节点。
   
   如果主节点的数据还没有写到从库,那么数据不能算提交,当该主节点变成从节点时,便会触发回滚,那些没写到从库的数据将会被删除,可以通过rollback子目录中的BSON文件恢复回滚的内容。
   
   只能链接到主节点,如果链接到从节点的话,会被拒绝写入操作,但是如果没有使用安全模式,因为mongo的fire and forget 特性,会把拒绝写入的异常给吃掉。
    (2)使用副本集方式链接 
   能根据写入的情况自动进行故障转移,但是当副本集进行新的选举时,还是会出现故障,如果不使用安全模式,依旧会出现写不进去,但现实成功的情况。
       
   分片是数据库切分的一个概念实现,这里也是简单总结为什么要使用分片以及分片的原理,操作。
   
   当数据量过大,索引和工作数据集占用的内存就会越来越多,所以需要通过分片负载来解决这个问题
   
    (2)分片的核心操作 
   分片一个集合:分片是根据一个属性的范围进行划分的,MongoDB使用所谓的分片键让每个文档在这些范围里找到自己的位置
   块:是位于一个分片中的一段连续的分片键范围,可以理解为若干个块组成分片,分片组成MongoDB的全部数据
    (3)拆分与迁移 
   块的拆分:初始化时只有一个块,达到最大块尺寸64MB或100000个文档就会触发块的拆分。把原来的范围一分为二,这样就有了两个块,每个块都有相同数量的文档。
   迁移:当分片中的数据大小不一时会产生迁移的动作,比如分片A的数据比较多,会将分片A里面的一些块转移到分片B里面去。分片集群通过在分片中移动块来实现均衡,是由名为均衡器的软件进程管理的,任务是确保数据在各个分片中保持均匀分布,当集群中拥有块最多的分片与拥有块最少分片的块差大于8时,均衡器就会发起一次均衡处理。
   
   启动两个副本集、三个配置服务器、一个mongos进程
   配置分片
   
    (2)索引 
     分片集合只允许在_id字段和分片键上添加唯一性索引,其他地方不行,因为这需要在分片间进行通信,实施起来很复杂。
   当创建分片时,会根据分片键创建一个索引。
   
   (2)低效的分片键
   (3)理想的分片键
   
   根据不同的数据中心划分
       (2)最低要求 
       (3)配置的注意事项 
   需要估计集群大小,可使用以下命令对现有集合进行分片处理
    (4)备份分片集群 
   备份分片时需要停止均衡器
   
   使用64位机器、32位机器会制约mongodb的内存,使其最大值为1.5GB
    (2)cpu mongodb 只有当索引和工作集都可放入内存时,才会遇到CPU瓶颈,CPU在mongodb使用中的作用是用来检索数据,如果看到CPU使用饱和的情况,可以通过查询慢查询日志,排查是不是查询的问题导致的,如果是可以通过添加索引来解决问题
   mongodb写入数据时会使用到CPU,但是mongodb写入时间一次只用到一个核,如果有频繁的写入行为,可以通过分片来解决这个问题 (3)内存 
   大内存是mongodb的保障,如果工作集大小超过内存,将会导致性能下降,因为这将会增加数据加载入内存的动作
    (4)硬盘 
   mongodb默认每60s会与磁盘强制同步一次,称为后台刷新,会产生I/O操作。在重启时mongodb会将磁盘里面的数据加载至内存,高速磁盘将会减少同步的时间
    (5)文件系统 
   使用ext4 和 xfs 文件系统
   禁用最后访问时间
    (6)文件描述符 
   linux 默认文件描述符是1024,需要大额度的提升这个额度
    (7)时钟 
   mongodb各个节点服务器之间使用ntp服务器
   
   启动时使用 - -bind_ip 命令
    (2)身份验证 
   启动时使用 - -auth 命令
    (3)副本集身份认证 
   使用keyFile,注意keyFile文件的权限必须是600,不然会启动不起来
   
   
   搭建副本集至少需要两个节点,其中仲裁结点不需要有自己的服务器
    (2)Journaling日志 写数据时会先写入日志,而此时的数据也不是直接写入硬盘,而是写入内存
   但是Journaling日志会消耗内存,所以可以在主库上面关闭,在从库上面启动
   可以单独为Journaling日志使用一块固态硬盘
   在插入时,可以通过驱动确保Journaling插入后再反馈,但是会非常影响性能。
   
   -vvvvv 选项(v越多,输出越详细)
   db.runCommand({logrotare:1}) 开启滚动日志
       (2)top 
       (3)db.currentOp 
      
   动态展示mongodb活动数据
   
   占用当前mongodb监听端口往上1000号的端口
   
   把数据库内容导出成BSON文件,而mongorestore能读取并还原这些文件
    (2)mongorestore 
   把导出的BSON文件还原到数据库
    (3)备份原始数据文件 可以这么做,但是,操作之前需要进行锁库处理 db.runCommand({fsync:1,lock:true})  db.$cmd.sys.unlock.findOne 请求解锁操作,但是数据库不会立刻解锁,需要使用 db.currentOp 验证。
    db.runCommand({repairDatabase:1}) 修复单个数据库
   修复就是根据Jourling文件读取和重写所有数据文件并重建各个索引 (2)压紧 
   压紧,会重写数据文件,并重建集合的全部索引,需要停机或者在从库上面运行,如果需要在主库上面运行,需要添加force参数 保证加写锁。
   
    (2)为提升性能检查索引和查询 
   总的来说,扫描尽可能少的文档。
   保证没有冗余的索引,冗余的索引会占用磁盘空间、消耗更多的内存,在每次写入时还需做更多工作
    (3)添加内存 
   dataSize 数据大小 和 indexSize 索引大小,如果两者的和大于内存,那么将会影响性能。
   storageSize超过dataSize 数据大小 两倍以上,就会因磁盘碎片而影响性能,需要压缩。

MongoDB 是什么?看完你就知道了

2. MongoDB 是什么 ? 能干嘛?

最近在回顾mongodb的相关知识,输出一篇文章做为MongoDB知识点的总结。
  
 总结的目的在于回顾MongoDB的相关知识点,明确MongoDB在企业级应用中充当的角色,为之后的技术选型提供一个可查阅的信息简报。
  
 MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库
  
 (1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。
  
 使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。
  
 (2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
  
 (3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。
  
 SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。
  
 MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。
  
 MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。
  
 MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。
  
 MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据操作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。
  
 MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。
  
 MongoDB核心服务器主要是通过mongod程序启动的,而且在启动时不需对MongoDB使用的内存进行配置,因为其设计哲学是内存管理最好是交给操作系统,缺少内存配置是MongoDB的设计亮点,另外,还可通过mongos路由服务器使用分片功能。
  
 MongoDB的主要客户端是可以交互的js shell 通过mongo启动,使用js shell能使用js直接与MongoDB进行交流,像使用sql语句查询mysql数据一样使用js语法查询MongoDB的数据,另外还提供了各种语言的驱动包,方便各种语言的接入。
  
 mongodump和mongorestore,备份和恢复数据库的标准工具。输出BSON格式,迁移数据库。
  
 mongoexport和mongoimport,用来导入导出JSON、CSV和TSV数据,数据需要支持多格式时有用。mongoimport还能用与大数据集的初始导入,但是在导入前顺便还要注意一下,为了能充分利用好mongoDB通常需要对数据模型做一些调整。
  
 mongosniff,网络嗅探工具,用来观察发送到数据库的操作。基本就是把网络上传输的BSON转换为易于人们阅读的shell语句。
  
 因此,可以总结得到,MongoDB结合键值存储和关系数据库的最好特性。因为简单,所以数据极快,而且相对容易伸缩还提供复杂查询机制的数据库。MongoDB需要跑在64位的服务器上面,且最好单独部署,因为是数据库,所以也需要对其进行热备、冷备处理。
  
 因为本篇文章不是API手册,所有这里对shell的使用也是基础的介绍什么功能可以用什么语句,主要是为了展示使用MongoDB shell的方便性,如果需要知道具体的MongoDB shell语法可以查阅官方文档。
  
 创建数据库并不是必须的操作,数据库与集合只有在第一次插入文档时才会被创建,与对数据的动态处理方式是一致的。简化并加速开发过程,而且有利于动态分配命名空间。如果担心数据库或集合被意外创建,可以开启严格模式
  
 
  
 以上的命令只是简单实例,假设如果你之前没有学习过任何数据库语法,同时开始学sql查询语法和MongoDB 查询语法,你会发现哪一个更简单呢?如果你使用的是java驱动去操作MongoDB,你会发现任何的查询都像Hibernate提供出来的查询方式一样,只要构建好一个查询条件对象,便能轻松查询(接下来会给出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成没问题,也正因为这样简洁,完善的查询机制,深深的爱上了MongoDB。
  
 这里引用的是最新的驱动包,提供了一套新的访问连接方式
  
 
  
 这里只举例了简单的链接与简单的MongoDB操作,可见其操作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。
  
 插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。

3. mongodb 能做什么

MongoDB属于内存型数据库,在需要读性能要求很高的项目中有着比较不错的表现。

可做前段缓存服务器、缓冲数据存储区,同样也可以作为应用系统的存储服务器,例如微博、论坛等应用系统,也可以作为图片存储服务器(分布式);

在数据写方面,Mongo也支持比较高的写速率(当然这取决于硬件设备)。这比一般使用硬盘存储介质的关系数据库的存储效率要高很多。


但是,非关系数据库会造成大量冗余数据,如果前期的系统设计很粗糙,后期的数据维护将会相当困难。

mongodb 能做什么

4. 千万别用MongoDB?真的吗

  为什么这么说?
  数据库应该是正确的,或是尽可能的正确,因为数据库的错误会比其它错误危害更大。不仅仅是因为其对运行,性能,开销,和其价值影响巨大,还因为其连带的东西。匆忙去去移植 TB 级的数据相比起去修改代码中的一个逻辑错误来说是一个很巨大的工作。而在系统出问题后需要恢复 TB 级的数据,你会被硬盘的速度所限制,你会有一种绝望的感觉。
  数据库是一个很复杂的系统,对于开发者来说就像一个黑盒一样。你需要对你所采用的数据库持绝对信任的态度,信任它会做正确的事,并会保持一致性和可用性。
  为什么 MongoDB 会流行?
  说句公道话,我们必需承认 MongoDB 是流行的,因为下面这些原因让其流行变得很合理:
  它非常容易地运行
  非常自由的 Schema 模型,而且可以很容易地和 JSON 类的数据结果映射起来,这对于程序员来于有很大的感染力(它完全符合程序员的逻辑思维),而且,程序员总是在项目可以做技术选型的人。
  成熟和健壮,track record,被真实的 Use Case 测试过,等等。对于那些喜欢选择成熟的技术的系统管理员和运营专业来说,这是一个很典型的选择。
  它单系统,低并发读的性能测试非常令人惊讶,而对于那些没有经验的评估者来说,这基本上来说是最重要的。
  现在,你可能正在开发一个随便玩一玩的网站,或是一个原型,或是那种只考虑开发速度不考虑别的的项目。老实说,对于这种项目,无所谓你用什么样的技术,只要搞定工作就行了。
  但是,如果你想要在 MongoDB 上搞一个大规模的系统,在上面运行真实的业务,那么,请不要用 MongoDB。转载,仅供参考。

5. mongodb的介绍

《mongodb》是2013年中国铁道出版社出版的图书,作者是邹贵金。该书介绍了MongoDB基础、应用、管理、性能优化、数据库的架构,环境搭建实例,编程实例等内容。

mongodb的介绍

6. 千万别用MongoDB?真的吗

 为什么这么说?
  数据库应该是正确的,或是尽可能的正确,因为数据库的错误会比其它错误危害更大。不仅仅是因为其对运行,性能,开销,和其价值影响巨大,还因为其连带的东西。匆忙去去移植 TB 级的数据相比起去修改代码中的一个逻辑错误来说是一个很巨大的工作。而在系统出问题后需要恢复 TB 级的数据,你会被硬盘的速度所限制,你会有一种绝望的感觉。
  数据库是一个很复杂的系统,对于开发者来说就像一个黑盒一样。你需要对你所采用的数据库持绝对信任的态度,信任它会做正确的事,并会保持一致性和可用性。
  为什么 MongoDB 会流行?
  说句公道话,我们必需承认 MongoDB 是流行的,因为下面这些原因让其流行变得很合理:
  它非常容易地运行
  非常自由的 Schema 模型,而且可以很容易地和 JSON 类的数据结果映射起来,这对于程序员来于有很大的感染力(它完全符合程序员的逻辑思维),而且,程序员总是在项目可以做技术选型的人。
  成熟和健壮,track record,被真实的 Use Case 测试过,等等。对于那些喜欢选择成熟的技术的系统管理员和运营专业来说,这是一个很典型的选择。
  它单系统,低并发读的性能测试非常令人惊讶,而对于那些没有经验的评估者来说,这基本上来说是最重要的。
  现在,你可能正在开发一个随便玩一玩的网站,或是一个原型,或是那种只考虑开发速度不考虑别的的项目。老实说,对于这种项目,无所谓你用什么样的技术,只要搞定工作就行了。
  但是,如果你想要在 MongoDB 上搞一个大规模的系统,在上面运行真实的业务,那么,请不要用 MongoDB。转载,仅供参考。

7. mongodb的使用原理

 所谓“面向集合”(Collection-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。Nytro MegaRAID技术中的闪存高速缓存算法,能够快速识别数据库内大数据集中的热数据,提供一致的性能改进。模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized Document Format)。  MongoDB已经在多个站点部署,其主要场景如下:1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。不适用的场景如下:1)要求高度事务性的系统。2)传统的商业智能应用。3)复杂的跨文档(表)级联查询。

mongodb的使用原理

8. mongodb的基本概念

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。

最新文章
热门文章
推荐阅读