Note:跟MongoDB的Roger发了email,随后给我开帐号了就可以编辑
官方wiki了,那边文档格式会好一些。先发份MongoDB简介在这。
“MongoDB不是在实验室设计出来的。利用我们自己开发大型,高可用性和健壮性系统的经验,我们开发了MongoDB。我们并不是从零开始,而是尝试发现哪些地方有问题,然后解决它。所以在我眼中,MongoDB让你从使用MySQL的基于关系的数据模型转变为基于文档的模型,从而获得如快速的嵌入式文档,易管理,使用无结构数据库进行敏捷开发,易于横向扩展和伸缩(因为join不再重要)等大量特性。使用关系型数据时有很多东西工作的很好,比如索引,动态查询和动态更新等,这些在MongoDB中也没怎么变化。比如,在MongoDB里设计索引应该和你在MySQL或Oracle里一样,你有选择在一个内嵌的域上建索引的能力。”
– Eliot Horowitz, 10gen公司首席技术官和联合创始人
为什么选择MongoDB?
面向文档
- 文档(对象)和编程语言的数据类型很好的对应
- 嵌入式文档和数组减少了join的必要
- 动态类型(无结构)使结构演变非常容易
- 没有join和(多对象)事务从而获得高性能和易伸缩性
高性能
- 没有join和事务使得读写操作很快
- 可以索引嵌入式文档和数组
- 可选的异步写操作
高可用性
易伸缩
- 最终一致性读操作分布到复制服务器上
- 自动分片(数据跨服务器自动分区)
读写操作分布在不同的分片上
没有join和事物使得分布式查询简单而高效
富查询语言
Mongo大型部署
1. 一个或多个分片,其中每个分片持有部分数据(自动管理)。读写操作自动路由到合适的分片上。每个分片是一个replica set。
一个replica set是一台或多台服务器,每台机器持有相同数据的拷贝。在特定的时间点,一台机器是主节点而其他机器是从节点。如果主节点死掉了,其中一台从节点自动接管为主节点。所有的写操作和一致性读操作都进入主节点,而所有的最终一致性读操作分布到所有从节点上。
2. 多台配置服务器,其中每台配置服务器持有表明数据位于哪个分片的元数据的拷贝。
3. 一个或多个路由器,其中每个路由器都作为一个或多个客户端的服务器。客户端向路由器发起查询和更新,路由器询问配置服务器后将请求分发到合适的分片上。
4. 一个或多个客户端,其中每个客户端都是用户应用程序的一部分,它使用自身语言的mongo客户端驱动向路由器发起请求
mongod是服务器端程序(数据或配置),mongos是路由器程序
小型部署(无分区)
1. 一个replica set(自动故障转移),或者一台主服务器加上零台或多台从服务器(无自动故障转移)
2. 一个或多个客户端,向replica set整体(驱动会管理向replica set中的哪台服务器发起请求)或者单独的主节点发起请求
Mongo数据模型
- 一个Mongo系统(参考上述部署)包含一组数据库
- 一个database包含一组collection
- 一个collection包含一组document
- 一个Document是一组field
- 一个field是一对key-value
- 一个key是一个名字(字符串)
- 一个value可以是一个
基本类型,如字符串,整数,浮点数,时间戳,二进制等等
document
value的数组
Mongo查询语言
你需要通过提供一个包含和你想要的文档匹配的域的查询文档来从一个db collection里获得文档。比如,{name: {first: 'John', last: 'Doe'}}会和collection里所有的文档使用John Doe这个姓名来进行匹配。类似的,{name.last: 'Doe'}会使用Doe这个姓来和所有文档进行匹配。而{name.last: /^D/}则会匹配姓以‘D’开头(正则表达式匹配)的所有文档。
查询也可以和嵌入式数组进行匹配。比如,{keywords: 'storage'}会匹配keywords数组中包含‘storage’的文档。类似的,{keywords: {$in: ['storage', 'DBMS']}}会匹配keywords数组中包含‘storage’或‘DBMS’的文档。
如果collection中有大量文档,则你需要建索引来加快查询速度。比如,ensureIndex({name.last: 1})或者ensureIndex({keywords: 1})。注意,索引会占用空间并让更新操作稍微变慢,所以在值得做出折衷的时候再使用它。
分享到:
相关推荐
### MongoDB简介 MongoDB是一种介于关系数据库和非关系数据库之间的产品,在非关系数据库中以其丰富的功能和接近关系数据库的特性而闻名。它支持类似JSON的BSON格式数据存储,适用于存储复杂的数据类型。 #### ...
在这个"MongoDB简介及精进PDF"的压缩包中,包含了对MongoDB的深度探讨,包括其基本概念、核心特性、最佳实践以及高级技术应用。 NOSQL主流产品的研究报告.docx可能涵盖了当前市场上流行的NoSQL数据库的比较,包括...
### MongoDB简介与实践 #### MongoDB概述 MongoDB是一款先进的、基于分布式文件存储的数据库系统,其核心编程语言为C++。这款数据库系统的设计初衷是为了满足Web应用对高性能、可扩展数据存储方案的需求。MongoDB...
MongoDB简介 软件测试
在Cherryleer创建的这个MongoDB简介中,你将学习到如何开始使用MongoDB,从安装、基本操作到高级特性,为你的项目提供一个强大的非关系型数据库解决方案。通过JavaScript与MongoDB的紧密集成,你可以更加高效地管理...
从提供的文件内容中,我们可以提取出以下关于MongoDB的知识点: 1. 关于NoSQL的知识点: NoSQL数据库是区别于传统关系型数据库的数据存储方式,它主要面对数据高并发性的实时读取与写入、海量数据存储和智能计算与...
MongoDB 是一个广泛使用的开源数据库系统,尤其在处理大量非结构化数据时表现出色。它是用 C++ 语言编写的,具有分布式文件存储的特性,适合于构建高度可扩展的应用程序。MongoDB 的设计目标是提供高性能、高可用性...
MongoDB是一种流行的开源、分布式文档型数据库,设计用于处理海量数据并提供高可用性和可扩展性。它采用了NoSQL的数据模型,与传统的SQL关系数据库相比,具有更灵活的数据结构和更高的写入性能。MongoDB使用BSON...
二、MongoDB简介 MongoDB是一个NoSQL数据库,它使用JSON-like文档进行数据存储,这使得处理复杂数据结构变得简单。它的特点是灵活性、高可用性、可扩展性和高性能,适用于大数据和实时应用。 三、安装MongoDB 1. ...
Spring Data MongoDB简介** Spring Data MongoDB提供了与MongoDB数据库交互的一系列抽象,包括MongoTemplate和Repository接口。通过这些接口,开发人员无需直接编写MongoDB的Java驱动程序代码,就能实现CRUD(创建...
MongoDB 简介 MongoDB 特点 安装与配置 安装 MongoDB 启动与配置 MongoDB 基本操作 数据库和集合 文档操作 查询操作 基本查询 高级查询 索引与性能优化 创建索引 索引类型 索引优化 聚合操作 聚合框架 常用聚合操作 ...
MongoDB简介 MongoDB是一款面向文档的NoSQL数据库,使用BSON(Binary Serialized Object Notation)存储数据。它具有高性能、高可用性和可扩展性,常用于大数据分析、实时分析、机器学习和人工智能等领域。 ...
#### 一、MongoDB简介 MongoDB是一种非常流行的开源文档数据库系统,它属于NoSQL(非关系型数据库)的一种。与传统的关系型数据库不同,MongoDB采用BSON(Binary JSON)格式存储数据,这使得数据存储更加灵活,并且...
Java和MongoDB简介 在本文中,我们将使用java作为开发语言,并配合MongoDB数据库来存储和下载图片。java是一种广泛使用的编程语言,known for its platform independence和large community support。MongoDB是一种...
1. **MongoDB 简介** MongoDB 是一个NoSQL 数据库,使用JSON 样式的文档存储数据,适合处理大规模数据。其特点包括高可用性、可扩展性和灵活性。 2. **Spring Data MongoDB 概述** Spring Data MongoDB 提供了一...