为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB 一个基于分布式文件存储的数据库 (一) 介绍

标签:
MongoDB
MongoDB 一个基于分布式文件存储的数据库 (一)
MongoDB[1]  是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB[2]  是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。[3] 

一、MongoDB介绍

1.1 历史

在2007年的后期,Dwight Merriman,艾略特霍洛维茨和他们的团队决定开发一个在线的网站服务。该服务的目的是为开发、托管和自动伸缩网络提供一个平台。应用程序,与谷歌应用引擎或微软Azure等产品有很大的合作。很快他们认识到没有任何开放源码数据库平台适合于服务的需求。我们觉得很多现有的数据库并没有真正的“云计算”原则它们具有:弹性、可伸缩性和……易于管理,但也易于使用。
1.2 MongoDB的设计原则

    1.2.1 高速、可扩展性和敏捷性
        设计团队在设计MongoDB时的目标是创建一个快速、大规模可扩展的数据库,和容易使用。为了在分区数据库中实现速度和水平的可伸缩性,上限定理,一致性和事务支持必须被妥协。因此,每这个定理,MongoDB提供了高可用性、可伸缩性和分区,以达到一致性和事务性的成本。支持。在实际操作中,这意味着,MongoDB不是使用表和行,而是使用文档来实现它。灵活、可伸缩、快。

    1.2.2 非关系型方法
        传统的RDBMS平台使用扩展方法提供可伸缩性,这需要更快的服务器提高性能。RDBMS系统中的下列问题导致了MongoDB和其他NoSQL的原因数据库是按照设计的方式设计的:
                为了进行扩展,RDBMS数据库需要将可用的数据连接起来或者更多的系统来报告结果。这是很难做到的RDBMS系统在所有数据可用时都被设计成可以工作的一起计算。因此,数据必须可用于单个处理的位置。
                在多个主动活动服务器的情况下,当两者都得到更新时在确定哪个更新是正确的方面,多个源是一个挑战。
                当应用程序试图从第二个服务器读取数据和信息时已经在第一个服务器上进行了更新,但是还没有与第二个服务器同步服务器,返回的信息可能已经过时了。
              MongoDB团队决定采用一种非关系型的方法来解决这些问题。作为MongoDB将其数据存储在BSON文档中,其中所有相关数据都放在一起,这意味着一切都在一个地方。MongoDB中的查询基于文档中的键,所以文档可以跨多个服务器传播。查询每个服务器意味着它将检查自己的一组文档并返回结果。这支持线性可伸缩性和提高性能。  
             MongoDB有一个主次复制,其中主接受写请求。如果编写性能需要改进,然后可以使用分片;这将跨多个数据分割机器并使这些多台机器能够更新数据集的不同部分。切分是在MongoDB自动;随着更多的机器被添加,数据被自动地分发。   

    1.2.3 基于JSON的文档存储
      MongoDB使用基于json的(JavaScript对象标记)文档存储为数据。JSON / BSON提供一个无模式的模型,它在数据库设计方面提供了灵活性。与RDBMSs不同,更改可以对模式进行无缝的处理。
            该设计还通过提供相关数据的分组来实现高性能。在内部,让它易于搜索。
            JSON文档包含实际的数据,并且与SQL中的一行相当。然而,形成鲜明对比RDBMS行,文档可以有动态模式。这意味着集合中的文档可以不同的字段或结构,或公共字段可以有不同类型的数据。
        一个文档以键值对的形式包含数据。让我们用一个例子来理解这个问题:

![图片描述][1]
正如前面提到的,键和值是成对出现的。文档中一个键的值可以是空的。在上面的示例中,文档有三个键,即“Name”、“Phone”和“传真”。“传真”键
没有价值。

    1.2.4 性能和功能对比
        为了使MongoDB具有高性能和快速的特性,RDBMS中常用的一些特性系统在MongoDB中是不可用的。MongoDB是一种面向文档的DBMS,数据存储在其中文档。它不支持连接,也不具有完全通用的事务。然而,它确实为辅助索引提供支持,它允许用户查询使用查询文档,并且提供支持每个文档级别的原子更新。它提供了一个副本集,这是主从的一种形式具有自动故障转移的复制,并且具有内置的水平扩展。

    1.2.5 随处都能运行数据库
            主要的设计决策之一是能够从任何地方运行数据库,这意味着它应该能够在服务器、虚拟机、甚至云计算上运行,使用“按你付费”的服务。的语言

用于实现MongoDB的是C++,它使MongoDB能够实现这一目标。10 gen网站为不同的操作系统平台提供二进制文件,使MongoDB能够在几乎任何类型的机器上运行。

    下面是MongoDB与SQL的不同之处。
            1。MongoDB使用文档来存储它的数据,它提供了一个灵活的模式(相同集合中的文档可以有不同的字段)。这使用户能够存储嵌套或多值字段,如数组、散列等。相反,RDBMS系统提供一个固定的模式,其中列的值应该具有类似的数据类型。同样,在单元格中存储数组或嵌套值是不可能的。
            2。MongoDB没有提供对连接操作的支持,比如SQL。但是,它使用户能够将所有相关的数据存储在一个文档中,避免在外围使用连接。它有一个解决这个问题的方法。我们将在后面的章节中更详细地讨论这个问题。
            3。MongoDB不像SQL那样提供对事务的支持。但是,它保证了文档级别的原子性。另外,它使用隔离操作符隔离影响多个文档的写操作,但它确实如此
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
7112
获赞与收藏
545

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消