博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019/08/08 NoSQL基础概念及MongoDB(01)~1
阅读量:3925 次
发布时间:2019-05-23

本文共 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/

你可能感兴趣的文章
Mysql各种存储引擎对比总结(常用几种)
查看>>
java为我们已经提供了各种锁,为什么还需要分布式锁?
查看>>
一文带你理解mysql中的分区表和合并表(一个常见知识点)
查看>>
Redis5.0数据淘汰策略详解(最新版本,面试常问)
查看>>
为什么 MongoDB 索引选择B-树,而 Mysql 选择B+树(精干总结)
查看>>
面试官:说说 Springboot 中的 javaConfig(基于Spring5.2)
查看>>
你的钱为什么被转走,这篇文章告诉你答案(CSRF详解)
查看>>
JVM中的一个小知识点:深堆和浅堆的概念
查看>>
HashMap的负载因子初始值为什么是0.75?这篇文章以最通俗的方式告诉你答案
查看>>
详解java中一个面试常问的知识点-阻塞队列
查看>>
除了Thread和Runnable,你还知道第三种创建线程的方式Callable吗
查看>>
java线程面试题集锦(第一版本)
查看>>
记一次java中三元表达式的坑(避免踩坑)
查看>>
面试官:如何实现一个乐观锁(小白都能看得懂的代码)
查看>>
CopyOnWriteArrayList,一个面试中经常问到的冷门容器
查看>>
设计模式之桥接模式
查看>>
设计模式之组合模式
查看>>
java网络编程(1)基础知识点总结
查看>>
java网络编程(2)Socket编程案例(TCP和UDP两种)
查看>>
设计模式之享元模式
查看>>