无模式(或者说是模式自由),使用C++语言编写的面向文档的数据库。正因为MongoDB是面向文档的,所以它可以管理类似JSON的文档集合。又因为数据可以被嵌套到复杂的体系中并保持可以查询可索引,这样一来,应用程序便可以以一种更加自然的方式来为数据建模。
所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。
模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。
MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。
根据官方网站的描述,Mongo适合用于以下场景:
- 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
- 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
- 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
- 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
- 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。
- 自然,MongoDB的使用也会有一些限制,例如它不适合:
- 高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
- 传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
- 需要SQL的问题
下面介绍MongoDB的特点:
- 统一的UTF-8编码:不是UTF-8编码集合的数据也可以通过使用一种特殊的二进制数据类型来保存,查询。
- 跨平台支持:二进制文件可以在Windows,Linux,OS X和Solaris平台上使用。MongoDB可以在大多数小端系统上编译通过。
- 支持丰富的类型:支持 dates, regular expressions, code, binary data 等类型。
- 查询结果支持Cursor操作。
- 支持Ad hoc queries(Ad hoc query:即席查询,数据库应用最普遍的一种查询,利用数据仓库技术,可以让用户随时可以面对数据库,获取所希望的数据。在MongoDB中,可以在任何时候查询任何一个field。它支持 range queries,regular expression searches 和其他特殊的查询类型。同时查询也可以包含用户定义的javascript函数。
- 支持嵌套域的查询
- 支持索引:支持二级索引包括 single-key, compound, unique, non-unique, geospatial indexes.嵌套的域同样也可以被索引。如果我们对一个数组类型进行索引,那么数组中所有元素也会自动被索引。当一个查询执行时,MongoDB的查询优化器会尝试多个不同的query plan,并选择执行速度最快的。开发者可以通过explain功能看到索引被使用的过程,然后可以通过hint功能来选择另一个不同的索引。可以在任何时候创建和删除索引。
- aggregation:除了ad hoc queries外,MongoDB还支持一系列工具来支持聚合,例如MapReduce和其他类似于SQL的GROUP BY的函数集合。
- 文件存储:该软件实现了一个称为GridFS的协议,这个协议是用来帮助从数据库中存储和获取文件的。
- 支持服务器端javascript执行:javaScript是MongoDB的一种通用语言,它可以被用在查询,聚集函数,直接由数据库执行。
- 下面是一个使用javascript的查询例子:db.foo.find({$where:function(){return this.x==this.y;}})
- 发送代码到数据库执行:db.eval(function(name){return “Hello, ”+name;},[“Joe”])
- javaScript的变量可以被存储在数据库中并被其他javas作为全局变量使用。任何合法的javascript类型包括函数和对象,都可以被存储在MongoDB中,所以javascript可以被用来写<存储过程>
- capped collection:MongoDB支持被称为capped collections(定量集合)的定长集合。Capped collections是唯一一种维持插入顺序的集合,其中,如果达到容量最大值,那么就会覆盖第一个元素,也就是说capped collection的行为类似于一个环形队列。一种特殊的cursor类型,称为tailable cursor,可以被用在capped collection上,当完成结果返回时,这种cursor不会关闭,而是会继续等待更多的结果来返回。也就是说如果有新的记录插入到capped collection的话,cursor会自动返回。
- 目前提供多种语言的driver。
- 部署:MongoDB使用的是memory-mapped files(内存映射文件),所以在32位机器上限制数据的最大大小为2GB,同时MongoDB服务器只能在小端系统上运行。
相关推荐
### MongoDB入门知识点详解 #### 一、NoSQL简介与MongoDB概述 ...通过上述知识点的学习,相信您已经对MongoDB有了初步的认识,接下来可以进一步深入研究其高级特性,以便更好地应用于实际项目中。
MongoDB是一款开源、高性能、无模式的文档型数据库,常用于大数据存储和处理。...通过以上内容,相信您已经对MongoDB的安装、基本操作和常见应用场景有了初步的认识。祝您学习愉快,如有疑问,欢迎继续探讨。
- **非关系型数据库(NoSQL)**:非结构化的数据存储,强调灵活性和扩展性,如MongoDB、Cassandra。 ### 二、MySQL数据库 MySQL作为RDBMS,它的主要特点是: 1. **简单易用**:安装和配置相对简单,管理数据库的...
在本压缩包中,你将...这些学习资料将帮助你逐步建立起对ES、MongoDB、Oracle、TS和NodeJS的全面认识,提升你的技能水平,使你在IT行业中更具竞争力。记得理论与实践相结合,不断探索和实践,才能真正掌握这些技术。
初步认识RabbitMQ及高可用集群部署 详解RabbitMQ消息分发机制及主题消息分发 RabbitMQ消息路由机制分析 RabbitMQ消息确认机制 Redis redis数据结构分析 Redis主从复制原理及无磁盘复制分析 Redis管道模式...
**Python网络爬虫技术概述** Python网络爬虫技术是数据获取和分析的重要工具,尤其在大数据技术类专业...通过本章的学习,学生将具备初步的Python网络爬虫开发能力,为后续更高级的爬虫技术和数据分析打下坚实的基础。
实验一“认识DBMS”是这门课程的初步实践,旨在帮助学生建立对数据库管理系统(DBMS)的基本理解。在这个实验中,我们将探讨DBMS的基本概念、功能以及它在实际应用中的重要性。 首先,DBMS是数据库管理系统...
在实践中,学生将学习到Web全栈开发的基本流程,从需求分析、设计、编码、测试到部署,同时也会对人工智能在Web应用中的作用有初步认识。通过这样的项目,不仅可以提升技术能力,还能锻炼项目管理和团队合作的能力。
通过本课件的学习,你将掌握Web数据库的基础理论,学会如何设计和实现Web数据库应用,理解数据库安全策略,并对现代Web数据库技术有初步认识。实践环节,可以尝试搭建一个简单的Web数据库应用,以巩固所学知识。
通过阅读它,读者可以快速建立对大数据概念的初步认识,并且能够从实际案例中学习到大数据技术的运用。 在内容部分,虽然出现了重复的网址链接,但这一部分信息似乎与大数据主题不相关,且文档中指出了内容扫描的不...
在“简单的web作业”这个项目中,我们主要探讨的是网页制作的基本要素和流程,涵盖了用户登录、注册以及首页设计等核心功能。...完成这个作业,不仅能够提升编程技能,还能对Web应用的完整生命周期有一个初步的认识。
数据库类型概述:初学者入门指南 数据库是现代信息技术的核心组成部分,是存储、组织和管理数据的关键工具。...希望本文的介绍能帮助初学者建立起对数据库的初步认识,激发大家进一步探索数据库世界的兴趣。
3. 事故处理与应急响应:如何在发生事故时保持冷静,进行初步处理,以及如何向警方报告事故。 4. 车辆知识:了解汽车的基本构造,如刹车系统、转向系统、发动机运作原理等,以及日常维护检查。 5. 环保驾驶:理解...
Spring框架是Java开发领域中...以上是对Spring框架的初步认识,深入学习和实践,可以借助“初识Spring框架-资料.rar”中的教程、文档和示例,逐步掌握Spring的各个方面,从而在实际项目中更加熟练地运用这一强大框架。
1. **Node.js基础**:讲解Node.js的安装、配置,以及如何编写第一个Node.js程序,让读者对Node.js有一个初步的认识。 2. **V8引擎**:深入V8引擎的工作原理,包括JavaScript的编译、垃圾回收机制,帮助理解Node.js...
在案例分析中,研究者使用实际制造业数据进行了初步研究,发现生产计划是MTO制造业中最具挑战性的环节。计划不足可能导致订单延误、资源利用率低下、工作负荷过重和关键资源瓶颈。通过对MES数据的预处理,创建了无...
【个人网站毕业设计有...通过这样的个人网站毕业设计,学生能够全面掌握网站开发流程,从构思到实现,再到后期的维护和优化,对整个IT行业有一个初步但全面的认识。对于想要深入学习IT的人来说,这是一个很好的起点。
我们的初步定义非常广泛: 一个数据库是一组相关数据的集合。数据指的是可记录并具有内在含义的事实。比如,你所认识的所有人的姓名、电话号码和地址。这些信息可能记录在索引地址簿中,或者存储在磁盘上,使用如...
定义网站首先需要对整个站点有清晰的认识,明确设计目标,理解主要任务是什么,如何组织和规划来完成这些任务。其次,保持网站的高质量也是至关重要的。在面对激烈的竞争时,优质的产品和服务是网站脱颖而出的关键。...