3
月25日
MongoDB(取自“humongous”)1.4
版发布
后不久,其创始人Dwight Merriman(前DoubleClick CEO/CTO)宣布10gen
——
开源文档数据库MongoDB背后的公司,将为其提供商业培训和支持。
InfoQ借此机会采访了Merriman,了解了MongoDB的特性、适用性以及在NoSQL数据库社区中的地位,文中适当引用了他的一些回
答。
MongoDB介绍
MongoDB是一个可扩展、高性能的下一代数据库。MongoDB中的数据以文档形式存储,这样就能在单个数据对象中表示复杂的关系。文档可能由
以下几 部分组成:独立的基本类型属性、“内嵌文档”或文档数组。
这样的灵活性让开发者能以一种易于管理且灵活的方式来对大量的问题进行建模,不必将数据打散到不同的数据表中。在数据不宜被构造成单独文档的情况
下,MongoDB有“DBRef”的概念,这是从文档的一个属性指向另一个文档的指针。
从MongoDB数据库中获取和查询数据是十分灵活的——可以基于主文档、文档中的任意属性、任意内嵌文档、数组中的任意文档来动态地查询文档。可
以通过 “点”符号来访问内嵌文档。
特性
用C++开发的MongoDB有以下特性:
- 面向文档的存储方式(发挥JSON风格的数据模式的力量和灵活性)
- 内部对象、内嵌数组、地理空间信息
- 动态查询
- 支持全索引,包括二级索引
- 查询剖析
- 快速、原地更新
- 对二进制大数据对象(例如照片和视频)的有效存储
- 支持复制和故障转移
- 针对云级扩展的自动分片(alpha阶段)
- 针对复杂聚合的MapReduce
- 商业支持、培训和咨询
起源与目的
MongoDB的博
客
上是这样来介绍他们的目标的:
一直以来,MongoDB的目标都不是处理少数问题的特殊数据库,而是一种新型数据库,是可以为开发者解决大量现实问题的数据库。
MongoDB项目的重点是将非关系模型的优点和传统数据库中常见的重要特性结合起来,前者包括高可扩展性、性能和易于开发,后者在重要的操作型数
据存储中很有用。
MongoDB不是在实验室里设计出来的,它源自于我们自己在构建大规模高可用系统方面的经验。
MongoDB在16个月前,于2009年2月11日,发布了第一个正式版本。其背后的哲学
告诉大家,尽管出于可扩展
性和性能的考虑削弱了事务语义,人们还是需要一个功能更强大的工具来应对常见问题,不仅仅是 纯Key-Value存储。
与DDD的关系
文档化范式是一种有趣的用于持久化复杂对象结构的途径。尤其是领
域驱动设计(DDD)
所提出的聚合
概念,只有根实
体能被其他实体连接到,被依赖的实体和值只能通过根来访问。在DDD的项目里,基于MongoDB的仓库
能方便地用于提供持久化功
能。另外,还有一个相关的观点,当关系到业务实体时,业务领域中总是会提到文档。因此,也许用文档作为内部表示方式会比其他数据结构或对象更合适一些。
在无模式的文档数据库中,数据建模依然十分重要。在创建文档前有多方面的关系
需要慎重考
虑,不然会导致数
据重复、性能不佳和其他问题
。
范例与教程
例如,在一个关系型数据库中,一篇博客(包含文章内容、评论、评论的投票)会被打散在多张数据表中。在MongoDB中,能用一个文档来表示一篇博客,评
论与投票作为文档数组,放在正文主文档中。这样数据更易于管理,消除了传统关系型数据库中影响性能和水平扩展性的“JOIN”操作。
> db.blogposts.save({ title : "My First Post", author: {name : "Jane", id :1},
comments : [{ by: "Abe", text: "First" },
{ by : "Ada", text : "Good post" }]
})
> db.blogposts.find( { "author.name" : "Jane" } )
> db.blogposts.findOne({ title : "My First Post", "author.name": "Jane",
comments : [{ by: "Abe", text: "First" },
{ by : "Ada", text : "Good post" } ]
})
> db.blogposts.find( { "comments.by" : "Ada" } )
> db.blogposts.ensureIndex( { "comments.by" : 1 } );
你可以直接在交互式MongoDB Web控制台Shell
里运行
该范例,其中还嵌入了在线教程
。
InfoQ的CTOAlex Popescu
在myNoSQL
中放了很多新闻、评论和多个NoSQL数据存储(包括MongoDB
)的比较,可以参考他的生
产环境笔记
。
Teach Me To Code
发布了3
段视频
,介绍了MongoDB的诸多特性。
Pivotallabs提供了一段由
10gen的Michael Dirolf做的介绍性演讲
的录像。Slideshare上还能找到Kyle
Banker做的一个比较完整地介绍MongoDB的演讲
。
安装与集成
MongoDB数据库遵循GUN AGPL
v3.0协议
发布
,mongodb.org
提供的驱动遵循Apache
License v2.0
。 你能从github
上获取它的
C++源代码
,并在任
意操作系统上构建
它。
你也能以二进制包
的
形式在Linux、MacOS X、Windows和Solaris上安装
MongoDB。
MongoDB本身以mongod
守护进程的形式运行,这是核心数据库服务器,
随后通过多种驱动来访问它。分片支持和数据库路由功能由mongos
服务来提供。
有人努力在几乎所有编程语言中支持MongoDB。它有多种语言的驱动
:C
、C++
、C# & .NET
, ColdFusion
、Erlang
、Factor
、Java
、Javascript
、PHP
、Python
、Ruby
、Perl
,等等
。
MongoDB还支持其他框架,例如gremlin
(图
数据库)的“blueprints”连接器库
。Debasish
Ghosh将之集成
到了可扩展Actor框架Akka
中,作为持久化模块
。
操作与可扩展性
从操作角度来讲,MongoDB可以根据应用程序的需要以两种模式来运行。第一种是“单主”(single
master)模式,只有一台主服务器来处理所有的写操作。读操作能从中分离出去,通过任意数量的从服务器来进行读操作,这有利于提高读的可扩展性(使用
场景:Sourceforge)。
对于那些写数据量很大或写频率过高,单台主服务器无法处理的应用程序,可以使用MongoDB的自动分片模式(正处于alpha阶段)。该模式下写
操作会自动分配到任意数量的“片”中(一般是一台或一组MongoDB服务器),它们负责这部分数据集的写和读。
无论使用哪种模式,MongoDB都会采取“强
一致性
”方法(你可以把MongoDB看成CAP
理论中的C-P系统)。
高可用性是通过将数据复制到多个MongoDB节点来实现的,每个节点都能及时成为一个分片的主服务器——MongoDB会自动处理故障转移。这能让你在
维持相当高的写可用性的同时,拥有强一致性特性,这对一些用例来说非常重要。
mongodb站点里有一个管
理员中心
提供如下操作信息:
文档、支持与培训
MongoDB的文档位于mongodb.org wiki
(PDF
),
遵循Creative Commons License。
10gen设计了MongoDB,以此来解决应用程序开发社区中的大量现实问题。我们可以把MongoDB用作很多有数据库后端的应用程序的数据存
储部分,实际的客户部署情况也证明了这一点。
今天,10gen为那些在生产应用程序中使用了MongoDB的客户提供支持
、咨询和培训
。在不久的将来,10gen将提供基于云的服务(例如托管的
MongoDB服务)以及针对大规模MongoDB集群的高级管理工具。
目前的使用情况
1.3版本的MongoDB已被广泛用于生产系统中,比较知名的用例
有:
当然,还有很多其他的用例
。
今后的开发规划
MongoDB团队关于数据存储的愿景非常广阔,他们认为目前的1.4版本包含了半数他们想要的特性,明年他们会继续努力。
- 更好的复制功能:实时、复制集、更多数据耐久性选项
- 可用于生产环境的分片
- 内嵌文档方面的更多特性
- 提 供更多原子更新操作符
- 单服务器耐久性
- 全文检索
查看英文原文:
MongoDB
Growing Up: Release 1.4 and Commercial Support by 10gen
转自:http://www.infoq.com/cn/news/2010/04/mongodb
分享到:
相关推荐
mongodb-spark官方连接器,运行spark-submit --packages org.mongodb.spark:mongo-spark-connector_2.11:1.1.0可以自动下载,国内网络不容易下载成功,解压后保存到~/.ivy2目录下即可。
MongoDB管理工具 MongoVUE1.4,很好用的管理工具。
MongoDB权威指南:MongoDB:The Definitive Guide第一版 第二版 中、英文4本合集
MongoDB程序员认证: MongoDB Certified Developer Study Guide - Study Guide - Exam Preparation - Practise Questions
04mongodb基本概念:文档.mp4
mongoDB数据库资源:xc_cms.zip
第三方mongo spark连接器,运行spark-submit --packages com.stratio.datasource:spark-mongodb_2.10:0.11.2可以自动下载,国内网容易下载失败,把这个文件解压后拷贝到~/.ivy2目录下即可。 ...
The Definitive Guide to MongoDB: A complete guide to dealing with Big Data using MongoDB The Definitive Guide to MongoDB, Third ...Chapter 10: Optimization Chapter 11: Replication Chapter 12: Sharding
MongoDB数据库
MongoDB排序错误:Sort operation used more than the maximum 33554432 bytes of RAM错误描述我
技术关键词: MongoDB 内容关键词: NoSQL文档数据库 用途: 用于存储和检索大量的分布式数据 内容描述: 一个基于分布式文件存储的开源数据库系统。MongoDB是一个NoSQL数据库,使用文档来存储数据,非常适合处理...
文档层使用MongoDB:registered:有线协议,允许通过现有的MongoDB:registered:客户端绑定使用MongoDB:registered:API。 所有持久数据都存储在FoundationDB键值存储中。 文档层实现了MongoDB:registered:API(v ...
mongodb游乐场 :books: 学习和探索MongoDB。 注意:这是在macOS上开发的。 指示 作为先决条件,您必须安装Mongo。 有关选项,请参见“部分。 启动MongoDB服务器 使用来自佐治亚州(GA)的邮政编码测试数据加载...
mongodb-trigger类似关系数据库的触发器,mongodb-trigger同样可以监听操作事件,粒度可以达到字段级别。使用场景同步mongodb数据到异构存储,如:mongo -> elasticsearch业务cache刷新,如:redis中镜像数据监听数据...
The IT industry is undergoing a revolution with the introduction of Big Data. Big Data is posing challenges to the traditional RDBMS way of storing and processing data ...Chapter 10: MongoDB How To's
添加 apt 存储库并安装 mongodb-10gen。 平台 乌本图 Debian 经过测试 ubuntu 12.04(精确) 要求 OpscodeCookbook[apt] 属性 组 ['mongodb'] 更新您的 mongodb.conf 值 组 ['mongodb']['config'] 更新您的 ...
MongoDB容器映像 ...当前提供的MongoDB版本为: 当前支持的RHEL版本是: RHEL7 目前支持的CentOS版本是: CentOS7的 安装 选择基于CentOS7或RHEL7的映像: 基于RHEL7的图像 该图像在可用。 要下载它
用于和支持的会话存储。 旨在成为等模块的维护良好且功能齐全的替代品 MongoDB 商店 该模块导出单个函数,该函数接受一个 connect(或 Express)实例并返回一个MongoDBStore类,该类可用于在 MongoDB 中存储会话。 ...
The "one-size-fits-all" thinking regarding traditional RDBMSs has been challenged in the last few years ...Chapter 10: MongoDB Use Cases Chapter 11: MongoDB Limitations Chapter 12: MongoDB Best Practices
支持的版本: Java 8至15 Spring启动2.4.2 MongoDB 4.4.3 MongoDB Java驱动程序4.1.1 Maven 3.6.3 摇摇3.0.0 MongoDB地图集 在上开始使用免费层集群。 阅读此博客文章:。 您将需要在application.properties...