弯曲NoSQL:MongoDB在评论中

MongoDB使用广泛的编程语言支持,SQL样疑问以及开箱即用的缩放

NoSQL运动它已经产生了一家替代数据商店,所有这些都尝试填补传统关系数据库实现留下的空白。但是,虽然在单个分类的伞下符合各种关系数据库(MySQL,Oracle,DB2等)很容易,但NoSQL世界更多样化,NoSQL标签太一般。MongoDB和Cassandra等NoSQL数据存储彼此非常不同,即苹果与苹果比较实际上是不可能的。因此,在NoSQL的世界内,存在诸如键值存储,图形数据库和面向文档的商店等子类别。

面向文档的存储,简称文档存储,对于计算世界来说并不新鲜。业界的灰胡子们将很快认识到LotusNotes是80年代末第一个成功的NoSQL文档存储之一。文档存储将数据封装到松散定义的文档中,而不是包含列和行的表中。底层文档的实现因数据存储而异,例如,一些文档表示为XML,另一些文档表示为JSON。

[信息世界:NoSQL脱颖而出:新应用程序的新数据库|首先是:Oracle NoSQL数据库|跟着商业科技新闻的最新发展并且每天都能得到一份关键故事的摘要InfoWorld每日时事通讯. ]

但总的来说,文件并未严格定义,实际上它们在定义数据时提供高度的灵活性。这种灵活性具有成本。例如,这些数据存储不支持SQL,而是支持更适合底层文档结构的自定义查询语言(例如用于XML数据存储的XPath的查询语言)。但数据定义中缺乏刚性也有许多好处。在许多情况下,与传统的关系数据库相比,更灵活的文档存储能够实现更快的迭代式开发,其中数据要求比开发步伐更快地发展。

MongoDB:灵活、可扩展的NoSQL近年来,一些文件店已经出来了,并获得了高度的开发人员思维分享。其中一个最受欢迎的是MongoDB,一个开源,在C ++中编写的架构免费文档商店,拥有各种编程语言,类似于与性能有关的兴趣功能以及与性能相关的许多有趣功能的支持可扩展性。

开箱即用,Mongo支持分片,这通过将跨节点群集的文档分开来允许水平缩放,从而使读取更快。更重要的是,Mongo提供了两种模式的复制:主从和副本集。在副本集中,没有主节点;相反,所有节点都是彼此的副本,并且没有单点故障。因此,副本集为支持大量数据的大量环境带来更多的容错。这些功能和更多不需要陆军的DBA实现,也不需要他们需要大量的硬件支出。Mongo可以在商品硬件平台上运行,只要有一个健康的内存。

Mongo是概要 - 它将存储您决定投入的任何文件。没有提前文档定义要求。最终,文档被分组为集合,这些集合将类似于关系数据库中的表。可以在飞行中定义集合。文档以二进制JSON格式存储,被称为BSON,并将表示为名称值对的数据(有点像列和行)。

 ;

 ;

MongoDB:JSON文档存储JSON是一种非常容易理解的格式。人类可以轻松地读取它(例如,与XML相反),机器可以高效地解析它。例如,Mongo中表示名片的文档如下所示:

在这种情况下,上面文档中的_id属性表示Mongo中的主键。与关系数据库一样,Mongo可以索引数据并强制数据属性的唯一性。默认情况下,索引_id属性;此外,该文档还可以进一步索引单个字段,甚至是它们的组合(例如,名称)地址)。此外,在定义索引时,您可以指定其值是唯一的。

但是,Mongo不提供限制或触发器。Mongo的文件可以自由地互相指代。例如,Contact_Log集合中的文档可以引用上面的名片的_ID,从而提供外部键入链路。但是,目前无法指定要删除相关文档,例如删除所有引用文件,因此您也无法在典型的RDBMS中执行此操作,以指定要采取的相应操作。当然,您可以在应用程序代码中添加此类逻辑,以及触发器是计划的以备将来发布。

Mongo中的JSON文档不强制属性值使用特定的数据类型。也就是说,不需要预先定义特定属性的格式。只要有意义,数据可以是字符串、整数甚至是对象类型。默认情况下,Mongo文档中的数据类型包括string、integer、boolean、double、array、date、object ID(您可以在上面的名片示例中看到)、binary数据(类似于blob)和正则表达式,尽管对这些类型的支持因驱动程序而异。

从僵化的数据定义中解放出来是文档存储的亮点。进一步以名片为例,同一系列可能包括以下文档:

注意两者之间的微妙但重要差异。虽然这两个文件都清楚地代表名片,但是第一个包括传真号码,而第二个包括传真号码,而第二个包括Twitter手柄。

花点时间思考同一实体如何在RDBMS中表示。在这种情况下,发卡表将需要传真和推特的列,即使许多行都不在这些字段中有任何数据。此外,改变表的定义事实后可能是有问题的,特别是当该表包含大量数据时。因此,在某些情况下,文档商店的数据定义自由度允许在快速发展的数据收集方面具有高度方差。实质上,文档商店可以允许数据敏捷性。

开发人员可以通过自己的shell(使用JavaScript查询语言)访问Mongo,而应用程序可以通过实现其通信协议的大量驱动程序与Mongo进行对话。因此,各种各样的应用程序都可以利用Mongo,从Java到Ruby再到PHP,仅举几个例子。此外,Mongo周围的社区创建了更高级别的类似ORM的库,这些库利用核心平台驱动程序,从而提供了代码中对象到文档的更紧密映射。

MongoDB:RDBMS风格的查询虽然许多文档存储(以及一般的NoSQL实现)避免了SQL的概念,从而实现了自定义查询语言和数据访问方案,Mongo的查询语言是SQL类似的。事实上,在高水平,它运行了很多SQL,并且相当容易接收。

例如,使用Mongo的shell,插入代表名片的文件如下所示:

在这种情况下,我通过直接在该集合上发出插入命令,我已将JSON文档插入名为Business_Cards的集合。我可以通过查找命令搜索business_card集合:

这将返回刚插入的文档。此外,该文档将包含Mongo的_ID字段,该字段自动在插入时生成。请注意,Mongo的查询语言与SQL密切类似于SQL - SQL中的相同查询将是如下所示的:

Mongo的查询语言支持多种搜索,包括布尔表达式:

这利用了布尔或返回:

它还涵盖了正则表达式:

作为返回,您获得了两份文件:

当然,Mongo支持更新文档并删除它们。更新非常强大,因为有许多操作可用于更新文档的各个方面。例如,将执行更新包含Twitter手柄“MSMith”的文档中的单元格号,如下所示:

在本例中,$set修饰符更改与查询匹配的第一个文档中的特定值。如果应更新与查询匹配的所有文档,则可以向update命令添加其他参数。

删除文档也同样简单。只需使用remove命令并发出查询:

最后,Mongo提供MapReduce,这是一种强大的搜索算法,用于批处理和聚合,其略有与SQL组相似。在高级别,MapReduce算法将一个大任务分成两个较小的步骤。地图功能旨在取得一个大输入并将其划分为较小的碎片,然后将数据移至缩小功能,从地图功能将各个答案蒸馏成一个最终输出。例如,MapReduce可以在Business_Card集合中使用,以确定有多少文档包含Twitter属性。

MongoDB:新的范式,新的挑战尽管MongoDB本身是开源的,但代码库是由一家名为10gen的商业实体积极维护和赞助的,该实体为Mongo提供支持、咨询、监控和培训。10gen支持许多使用Mongo的知名公司,包括迪士尼、Intuit和MTV网络等。除了强大的社区支持和商业支持外,Mongo还受益于优秀的文档。有许多已出版的书。

使用MongoDB并非没有挑战。对于初学者来说,Mongo需要很多内存,更倾向于将尽可能多的数据放入工作存储器以进行快速访问。实际上,数据不会立即将磁盘写入插件上(尽管您可以通过标志可选地要求此问题) - 后台进程最终将未被遮挡的数据写入磁盘。这使得写入非常快,但相应的读数可能偶尔会不一致。结果,在非重复的环境法庭中运行Mongo的可能性数据丢失。此外,Mongo不支持酸事务的概念,这是RDBMS世界的一款。

与传统数据库一样,蒙古的索引必须仔细考虑。不正确的索引集合将导致读取性能下降。此外,虽然定义文件的自由将提供高度的敏捷性,但它在长期谈到数据维护时具有反冲。集合中的随机文档存在搜索挑战。

关系数据库仍然是当今绝大多数应用程序的订书钉数据存储。但对于某些应用,Mongo提供的灵活性在开发速度和整体应用性能方面提供了优势。此外,Mongo的相对易用性和低价标签使其成为大型和小公司的有吸引力的选择。

  • 通过分片和副本集实现开箱即用的可扩展性和可用性
  • 通过驱动程序支持多种编程语言
  • 优秀的文档,包括一些已发表的书籍
  • 类似于SQL的即席查询
  • 强大的社区和商业支持
  • 没有酸性交错
  • 缺乏深度安全功能
  • BI工具集成滞后(尽管Jaspersoft支持MongoDB)
  • 查询不支持集合之间的连接

 ;

本文, ”弯曲NoSQL:MongoDB在评论中,“最初发表在infoworld.com.. 关注市场的最新发展数据管理云计算在infoworld.com。对于最新的商业技术新闻,请遵循推特上的InfoWorld.com

阅读更多关于数据管理的信息在InfoWorld的数据管理频道中。

这个故事“屈曲NoSQL:MongoDB在评论中”最初是发表的infoworld.

加入网络世界社区有个足球雷竞技appFacebooklinkedin.评论是最重要的主题。

版权所有©2012.Raybet2

IT薪水调查:结果是