最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

MongoDB 不断发展:发布 1.4 版本,10gen 提供商业支持

  • 2010-04-05
  • 本文字数:3037 字

    阅读完需:约 10 分钟

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 在 14 个月前,于 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 的 CTO Alex 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

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2010-04-05 10:386667
用户头像

发布了 135 篇内容, 共 58.7 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

基于Falcon-7B模型的QLoRA微调实操:构建面向心理健康领域的Chatbot

Baihai IDP

AI LLM 白海科技 大模型微调实践 QLoRA实践

大模型开发:从数据挖掘到智能应用

百度开发者中心

AIGC #人工智能 大模型微调

从过去5年CWE TOP 25的数据看软件缺陷的防护

华为云PaaS服务小智

云计算 软件开发 代码

多地同频|2023年国家网络安全宣传周 海泰方圆全面参与共建网络强国

电子信息发烧客

OP链丨ARB链代币合约质押挖矿系统开发

l8l259l3365

创新性与自主性的融合

百度开发者中心

AIGC #人工智能 生成式AI

一文了解亚马逊云科技适用于 Amazon Lightsail 的托管数据库

亚马逊云科技 (Amazon Web Services)

Xojo 2023 Release for mac(跨平台编程开发工具) v23.2.0.3.60612中文激活版

mac

windows 苹果mac Xojo 软件开发工具

卡奥斯第二届1024程序员节重磅预告!

Openlab_cosmoplat

开源 低代码

什么是高刷LED屏?

Dylan

刷新 LED显示屏 led显示屏厂家

幸福里基于 Flink & Paimon 的流式数仓实践

Apache Flink

大数据 flink

支持适配国产化平台的云管理软件你给推荐哪家?

行云管家

云计算 云服务 国产化 云管理

晋级揭晓!华秋第九届中国硬件创新创客大赛-华东分赛区决赛成功举办!

华秋电子

创业

香港站群服务器构建多站点网络的利器,将业务推向新高度

一只扑棱蛾子

站群服务器

大咖云集腾讯DevSecOps实践研讨会,共话落地实践经验

Geek_2d6073

流动性质押挖矿系统开发技术说明

V\TG【ch3nguang】

应用场域的深度融合与创新构想

百度开发者中心

#人工智能 ChatGPT 大模型微调

从理解到实现:一种强大的AI技术

百度开发者中心

深度学习 #人工智能 生成式AI

国密算法是什么意思?支持国密算法的云管平台哪家好?

行云管家

云计算 云管平台 云管理 国密 国密浏览器

Wappalyzer浏览器插件:揭开网站的技术秘密

凌览

前端 后端 网站 Wappalyzer

SmartNews 基于 Flink 的 Iceberg 实时数据湖实践

Apache Flink

大数据 flink 实时计算

如何使用Vcluster实现Kubernetes中的多租户

互联网工科生

Kubernetes 集群

SDK或低代码运行时,提示找不到某些库文件

矩视智能

深度学习 机器视觉

杀死Node.js!全新JS运行时“快到飞起”!

高端章鱼哥

node.js js Bun

小米华为,化干戈为玉帛!

这我可不懂

华为 小米

文心一言 VS 讯飞星火 VS chatgpt (95)-- 算法导论9.2 4题

福大大架构师每日一题

福大大架构师每日一题

ReentrantLock源码解析

Khirye

源码解析 Java源码 ReentrantLock

未来社交媒体的变革者

百度开发者中心

媒体服务 #人工智能 生成式AI

研发效能|DevOps 是运维还是开发?

laofo

DevOps cicd 研发效能 持续交付 效能度量

MongoDB不断发展:发布1.4版本,10gen提供商业支持_架构_Michael Hunger_InfoQ精选文章