MongoDB 简介

 

MongoDB简介

MongoDB是什么?

MongoDB, 取自英文单词(humongous), 是一个可扩展,高性能,开源的,面向文档的,使用c++实现的, NoSQL数据库。

 

MongoDB几个主要的术语

1文档( Document 一个有序的键值关联的集合   相当于关系数据库中的列

2集合( Collections集合就是一组文档   相当于关系数据库中的表

3数据库(Databas一组集合就组成了一个数据库

4MongoDB主要的数据类型

4.1 普通类型

bollean  integer float string 正则表达式,这些类型太普通, 任何数据库或者语言里面都有这些数据。

4.2 Js代码

4.3 array  例如 {x: [a,1,c] }

4.4内嵌式的文档(embeded Document{x {y”:21334}}

4.5ObjectId 每个文档都有一个唯一的ObjectIDObjectID 使用12位来存储2416进制位 前4位时间戳 3位标识机器 2位的进程ID 3位的自增

 

MongoDB的特性介绍之一复制集

    在传统的关系型数据库, 如MySQL上, 为了确保数据的安全, 我们一般都会提供类似这种主从的备份机制, 就是全部数据都写到master, 然后再同步到slave slave库只提供读的操作, 通过在读方面帮助主库分流, 从而降低主库的负载,提高主库的应答相应时间。同时备库作为主库的容灾, 如果主库挂掉,可以切换到备库,但是可能数据并不是最新, 无法保证完全的一致性。

MongoDB提供了备份集ReplicaSet的机制。 备份集,实际上是一个自动容灾备份的主备集群机制。备份集和master-slave的机制的最大不同是, 备份集没有一个所谓的master, 而是只有一个选举出来的节点, 当这个master节点出错的时候, 可以从集群中重新选举一个新的master节点,从而避免了单点失败。而更重要的是, MongoDB, 自动实现集合中的选举, 数据间同步都是自动完成, 无需开发者进行任何操作, 非常方便的保证数据的一致性。

如果当前master节点失败了, 那么剩余的节点会自动选出新的master节点出来,如果主节点发生了任何改变, 在新的主节点上的数据将被当作是最新数据,其他节点, 如果有些数据和这个新节点不同,将会自动回滚, 从而保证了整个集群的一致性。 而这个的实现是通过查询op_log在当前节点的操作,但是还没在新的主节点操作的, 查询出那些影响到master节点达到最新的所有操作。

 

MongoDB的特性之二 shards机制

    对于传统的关系型数据库的分表的实现, 一般需要在程序中, 实现复杂的根据某个id进行路由, 然后找到对应的数据库服务器,并在服务器中进行查找, 而这样会面临很多问题, 首先是如果数据库的容量到了,必须进行非常昂贵的复制操作, 同时, 添加新的服务器需要在修改程序, 从而使一些新的id可以保存到指定的服务器中, 这样的扩展性,对于数据高速发展的网站, 对于开发人员和DBA, 都是一个梦魇。而使用MongoDB, 则是在数据库级别屏蔽了这些相关的数据迁移和数据的负载均衡的操作, 对于开发者都是透明的。

MongoDB自动将数据分到不同的机器上, 实现了负载均衡, 同时可以更快的相应更大数量级的请求。

为了实现将数据自动分割集群上不同的机器, mongoDB主要的一个做法是将一个个的collection, 分割成更小的集合chunk 分块, 这些分块分布式的存储到多个不同的shards上面,而这些数据对应应用程序的透明的, 因为mongoDB又实现了一个mongos的进程处于所有的shards前面, 应用程序不知道任何chunk的信息, 但是mongos知道所有chunks的具体位置信息, 应用程序通过想mongos发送请求来获取所有的相关信息。由于mongos实际上实现了一个路由信息, 而应用程序发送的请求, 通过mongos转发到指定的shards, 然后在将最后的结果转发给应用程序。


shard机制的一个关键点是shardkeys。当你希望对数据进行划分, 你必须指定一个key, 所有的数据按照这个key,将数据划分到不同的shards上面。使用不同特性的key, 会有不同的优缺点 使用自增的Shardkey 缺点,有一个节点必须持续接受写数据, 而其他shard节点,只有读, 那个单点很容易出问题。使用随机的Shardkey 可以将节点随机的分配到不同的节点上,提高写的效率,使负载更加均衡。

shard的实现机制:shard的实现方式是, mongos实际上只是一个转发请求和应答的进程, 它本身并没有保存任何数据, 所有的关于chunk的元数据, 都保存在一个叫config server,的配置服务上, 在这个数据库上保存了所有关于指定的chunk节点保存在哪个shards的相关信息, mongos首先通过请求这个服务器, 获取对应的shards信息,再向对应的shards的信息, 发送请求, 并接受相应的应答。具体过程如下图所示。



五, 一个建议的生产环境的配置

为了避免单点的失败, 所有的实例都需要配置多个。

多个配置服务器 config server

多个路由服务器 mognos

使用shard机制, 并且对每个shard建立一个备份集,来保证数据安全性

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值