本文共 3454 字,大约阅读时间需要 11 分钟。
MongoDB属于nosql的领域,nosql是一种技术流派而不是特定的技术 大数据通常描述四维线 google收购的公司都是人工智能之类在特定领域走在前列的公司
并行数据库系统,是新一代高性能的数据库系统,是在MPP和集群并行计算环境的基础上建立的数据库系统。一般都支持关系型数据模型和sql语句查询,对传统意义上的数据库做了并行扩展,比如mysql的分片技术,将数据切片分布在不同 的节点上,来实现存储 使用了两种技术员: 水平切割和分区查询 ,切割以后,数据就分布在不同的物理节点,每一个节点称为一个分区,从逻辑角度来讲,每个数据片称为一个分区,查询操作可能需要跨分区进行查询,sql的查询要落在越少的分区上越好,
nosql出现在1998,非关系模型,分布式的,通常不支持ACID数据库设计范式的数据库管理系统,有几个特点 使用非常简单的数据模型,实现了元数据和数据分离,弱一致性 CAP,可用性,一致性,分区容错性,分布式系统通常关注其中两个,可用性和分区容错性 nosql可以完成高吞吐量, google的mapreduce每天处理的数据量可以达到20PB、 较高的水平扩展能力和低端硬件集群 nosql不支持ACID,所以就不能保证严格意义上的事务操作,因此对于高事务要求,NOSQL是不适用的,功能简单,要存储复杂的数据,还需要额外的设计,没有统一的查询语言 nosql有很多技术流派 1.数据模型和查询语言没有经过数学验证 2.不支持ACID特性 3.功能简单 4.没有统一的查询模型
还有一种叫newsql管理系统,关系型数据在处理优化的时候需要优化的因素有很多 关系型数据库在处理ACID处理时,有几个要素对性能影响非常大,比如 节点间的通信, 锁 缓冲区管理,把数据库组成页缓存在缓冲区 针对这些问题,新数据库在针对这方面采用了不同的设计方式,比如取消了耗资源的缓冲池,进而在整个内存中运行,把所有数据放在内存中运行,内存数据库 很多摒弃了单线程服务加锁的机制,采用并行模式多线程用同一个锁,才用冗余机制,来代替单机的昂贵资源消耗,这种尽可能改进了传统数据库,提升了性能,扩展到了多机系统上 代表产品比如clustrix,GenieDB,ScaleBase,NimbusDB mysql的Ndb cluster 也算是newsql的实现 mysql的变种,适合在云环境,Drizzle
nosql和newsql不同在于,newsql可以提供sql数据库的质量保证,也能够提供nosql的扩展性保证,是一种跨界产品。 MongoDB是nosql的一只,非常火热
还有云数据管理系统,DBAAS,数据库即服务,
大数据的分析处理 常用的是MapReduce机制,将数据先做map,切割到多个节点上去,而后再做聚合,hadoop就是这样的系统,用的是分布式文件存储, HBASE是nosql的一种 在统计学,R语言非常流行,也是开源编程语言,程序对数据进行编程处理,还可以直接展示非常直观的结果
CAP: 可用性,强一致性,P分区容错性(网络分区了,仍然可以接受请求,处理请求) mysql单机实现可用性,一致性 分布式系统一般,可用性,和分区容错性 ACID,原子性,一致性,隔离性,持久性 base基本可用,软状态,最终一致性 base是相对于ACID的一种技术弱一致性根据保证还可以划分不同的模型 因果一致性, 读自己写一致性好,读自己写的数据是一致的 会话一致性 单调读一致性,用户读取到某个数据后,后续的操作不会读到该数据更早版本, 时间轴一致性,所有数据的副本以相同的数据执行同一个更新操作
ACID和BASE在功能实现上是有所区别的
ACID BASE 强一致性 弱一致性 隔离性 可用优先 注重事务提交 尽力保证 嵌套事务 近似最近的数据,因为弱一致性 可用性 首选可用性 悲观的保守的方案 较为简单的数据模型ACID:强一致性,隔离性,采用悲观保守的方法,难以变化, BASE:弱一致性,可用性优先,采用乐观的方法,适应变化,更简单,更快
数据一致性的实现技术 NRW策略,N表示数据所有数据副本数,R完成读操作最少设计到的副本数,W完成写操作涉及到的副本数, R+W>N强一致性,R+W<=N弱一致 投票系统,qurom 2pc,2端式提交,一种协议,保证数据强一致性,主要把事务处理阶段分两个阶段,1.请求阶段,准备2.提交阶段, paxos,也是实现数据一致性的一种技术 vector clock向量时钟
数据存储模型:对nosql划分的流派就是根据数据存储模型来划分的
http://www.nosql-database.org **列式 存储模型 文档数据模型 键值数据模型 图式数据模型(地理计算) 对象数据库 网格,云数据库解决访问 ** 主要流派 列式存储 (展示结果跟表一样,不支持关系型数据的表链接查询) 键值数据模型(模型简单,易于实现) 文档数据模型 mongodb 图式数据模型(把数据的每个位置当做一个节点,并围绕节点,朝某个方向发散得到多个访问路径)列式模型:、 应用场景:在分布式文件系统之上提供支持随机读写的分布式数据存储 典型产品:HBASE (有中心节点,有元数据服务器) ,Hypertable(facebook) 数据模型:以“”列“”为中心进行存储,将同一列数据存储在一起 优点:快速查询、高可扩展性、易于实现分布式扩展
mysql能用的,mongodb都可以用,区别是mysql支持事务,mongodb不支持跨表事务
文档模型: 应用场景:非强事务需求的web应用 典型产品:mongodb、elasrticsearch(围绕apache,lucene,搜索引擎构建的搜索引擎工具,经常被拿来存储web服务的日志的,快速实现分析,logstash来收集日志存到els中,kibana是个web页面,提供了搜索页面)、couchDB,coushbase server 数据模型:也是键值模型,但存储为文档 优点:数据模型无非事先定义
memacached只是一个缓存,不是数据库
键值模型: 应用场景:内容缓存,用于大量并行数据访问高负载场景 典型产品:redis、dynamoDB(亚马逊研发,适合在较快速度上的SSD硬盘),riak,genidb,memachedb(新浪研发的,memacached提供持久存储服务) 数据模型:基于hash表实现的key-value 优点:查询迅速 redis的数据结构:string,映射,集合,有序集合,列表
图示模式: 应用场景:社交网络、推荐系统、关系图谱 典型产品:Neo4J(最知名),Infinite graph,titan,Trintiv 数据模型:图示结构,提升效应算法性能 优点:适应于图示计算场景
**易于伸缩扩展高性能的开源的,schema free 灵活易变,基于文档的 nosql关系型数据库 纵轴表示越往上,扩展性越强 横轴表示提供的功能的丰富性 RDBMS关系型管理数据库,功能强大,扩展很差 memcached只支持kv ** MongoDB特性 1.适用存储海量数据,2.基于文档的数据库系统。3.c++语言,开源GPL协议,支持solaris,linux,macos 由10gen商业公司来负责维护 利用json的方式来实现数据存储,支持索引,在单个列上,支持64个索引, 不支持事务,但支持原子事务 内存映射文件,支持延迟写 scalable扩展性 强大复制功能,一种类似主从复制,一种是副本集复制机制,一个几点出现故障,能快速自己内部自己选举新的主节点 auto-sharding实现自动分片机制(mysql要分片需要自己使用分片框架) 官方文档很丰富查询也是基于文档来实现,不能使用select,查询语句是json格式 可以在all shards上实现并行查询 gridfs分布式文件系统, 支持geospatial indexing 地理位置索引信息 有许多的many production deployments 适合哪些场景 web站点 缓存 较大数据量 高扩展性 没有严格事务要求, 不满足的场景 sql 对事物高要求 商业mongodb:nosql,文档存储,json数据模型,
https://www.mongodb.com
转载地址:http://zjkgn.baihongyu.com/