MongoDB技术交流

NoSQL数据库介绍    

传统SQL的瓶颈

随着互联网WEB2.0网站的兴起,传统关系型数据库力不从心

数据库并发负载非常高,往往每秒数万次读写请求,磁盘IO瓶颈

对数亿甚至数十亿的记录高效查询

7*24小时高可用,Failover,易扩展

  • 数据库高并发读写的需求。
  • 海量数据的高效率访问的需求。
  • 高可扩展性和高可用性的需求。

对于互联网海量数据来说,许多SQL特性无用武之地

很多场景对读一致性要求较低,事务系统成为高负载下的负担

Feed/微博系统,发送一条微博并不需要马上被粉丝读到

多数业务只是单表查询或主键关联,SQL Parser大量消耗CPU资源

  • 数据的一致性需求
  • 数据的读写绝对实时性需求
  • 复杂SQL查询,表关联需求

什么是NoSQL

  • NoSQL是Not Only SQL的缩写,而不是Not SQL,它不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等。
  • 相比传统数据库,叫它分布式数据管理系统更贴切,数据存储被简化更灵活,重点被放在了分布式数据管理上。
  • NoSQL处理大数据的优势?
  • 易扩展,数据之间无关系,这样就非常容易扩展。
  • 灵活的数据模型,可以随时存储自定义的数据格式。而在关系数据库里,增删字段是件非常麻烦的事情。如果是大数据量的表,增加字段简直就是一个噩梦。
  • 高可用,通过复制模型实现高可用性。
  • 高性能,得益于数据无关系性,数据库的结构简单,这样就有非常高的读写性能,尤其在大数据量下。
  • NoSQL的不足?
  • 弱事务性:在一些要求事务一致性较高、业务逻辑比较复杂,或者一些需要复杂分析查询的环境中,NoSQL难以担当重任
  • 弱联表查询:只能提供简单的查询,无法进行多表联合查询等复杂的查询操作。
  • 非主流:大部分NoSQL都还处于前-生产环境阶段,还有大量的关键特性有待实现

MongoDB 简介

主要特点

  • 高性能、易部署、易使用,存储数据方便。
  • 模式自由,支持动态查询、完全索引、文档内嵌查询。
  • 面向集合,以文档(K/V)形式存储,Key用于唯一标识,而Value则可以是各种复杂的文件类型。
  • 支持主/从服务器间的复制和故障恢复。
  • 自动分片,以支持云级别的服务伸缩性,可动态添加额外的服务器。
  • 一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • 一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的产品。
  • 它支持的数据结构非常松散,是类似JSON的BSON格式,因此可以存储比较复杂的数据类型。
  • 它最大特点是支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引,支持MadReduce功能。

Replica Sets副本集

可伸缩性

  • 性能
  • 冗余

高可用

隔离性

运行备份或者独立的后台复杂任务

开发时,进行在线业务测试

  • Primary主服务器,写操作只能在其身上发生,通过保存操作日志(oplog),然后异步同步到多个 Secondary 上。
  • Secondary从服务器,热机备份主服务器上的数据,分担主机读压力,当主机故障发生,随时待命接管主机工作。

Replica Sets主/从服务器间数据同步

红色箭头表示写操作写到Primary上,然后异步同步到多个Secondary上。
蓝色箭头表示读操作可以从Primary或Secondary任意一个上读。
各个Primary与Secondary之间一直保持心跳同步检测,用于判断Replica Sets的状态。


Sharding(分片)

  • Shard Server - mongod实例,存储实际数据的模块。
  • Config Server - mongod实例,存储集群元数据、分片信息等。
  • Route Server - mongos实例,客户端访问统一接入点,处理数据访问路由,查询优化,数据合并、排序、裁剪,请求推送等。

MongoDB何时分片:

  • 机器的磁盘不够用
  • 单个mongod已经不能满足写数据的性能需求
  • 想将大量的数据放在内存中提高性能
  • 一般来说,集群先从不分片开始,然后在需要时才转换成分片。
  • MongoDB的分片是指定一个分片key来进行,数据按范围分成不同的chunk,每个chunk的大小有限制。
  • 有多个分片节点保存这些chunk,每个节点保存一部分的chunk 。
  • 每一个分片节点都是一个Replica Sets,这样保证数据的安全性。
  • 当一个chunk超过其限制的最大体积时,会分裂成两个小的chunk 。
  • 当chunk在分片节点中分布不均衡时,会引发chunk迁移操作。
  • 分片是指将数据拆分,将其分散在不同机器上的过程。
  • 通过分片能够增加更多的机器,来应对不断增加的负载和数据。

MongoDB总结

不适用场合

  • 高度事务性的系统,例如银行或会计系统、业务支撑系统。
  • 传统的商业智能应用,针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。

适用场合

  • 网站数据,实时的插入,更新与查询。
  • 由于性能很高,可做持久化缓存层。
  • 存储大尺寸,低价值的数据。
  • 高伸缩性的集群场景。
  • BSON格式非常适合文档化数据的存储及查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值