为什么会出现NoSQL数据库

一、总结

一句话总结:sql不支持分布式且且有性能瓶颈且不支持分布式,不同NoSQL适合不同的场景

1、"不同的NoSQL数据库只适合不同的场景"这句话对么?

对的,NoSQL数据库是针对点的,关系型数据库是针对面的

2、NoSQL数据库有哪四种?

①KV键值对:redis,内容缓存,主要用于处理大量数据的高访问负载等; 
②bson:文档数据库,MongoDB 是一个基于分布式文件存储的数据库,C++编写的。皆在为web应用提供可扩展的高性能数据存储解决方案。它介于关系型数据库与非关系型数据库之间的产品,是非关系型中功能最丰富的,且最像关系型数据库的; 
③列存储数据库:分布式文件系统 
④图关系型数据库 :它不是放图的,放的是 关系:如朋友圈社交网络等。专注于关系图谱。

3、数据库主从复制和读写分离是什么?

主从复制:往主服务里插入一条数据的同时,也往从服务里写入一条数据(备份、容灾) 
读写分离:一般主作为写(20%),从作为读(80%)

二、互联网背景下为什么会出现NoSQL?

一、传统应用模式 (ALL IN ONE)

所有的东西都部署在一台机器上,包括站点、数据库、文件等等(现在阿里云的出现方便了很多)。核心工作就是:前端传过来一些数据,然后业务逻辑层拼装,然后访问数据库,数据库返回数据,数据拼装成页面,最终返回到浏览器。 
这时候数据库可能会率先成为瓶颈,在流量峰值期容易宕机,第一可以优化sql语句,第二,典型的应用都是读数据库频率远大于写数据库频率。这时候可以采用读写分离,多读一写的数据库架构(一般是20%是写库,80%是读库);

这时候的主要矛盾点已经变为业务复杂度的提升带来的耦合,导致升级困难,开发容易引入bug,维护成本也提升。

1、Memcached 分布式缓存服务器,通过文件缓存来缓解数据库压力,为多个web服务器提供了一个共享的高性能缓存服务。在Memcached服务器上,又发展了根据hash算法来进行多台Memcached缓存服务的扩展,然后又出现了一致性hash来解决增加或减少缓存服务器导致重新hash带来的大量缓存失效的弊端。

不足: 
由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了。

2、主从复制读写分离 
主从复制:往主服务里插入一条数据的同时,也往从服务里写入一条数据(备份、容灾) 
读写分离:一般主作为写(20%),从作为读(80%)

3、在Memcached 高速缓存、MySQL主从复制,读写分离的基础之上,由于大量数据的增加,写压力开始出现瓶颈,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。 
同时开始使用分库分表来缓解压力。 
MySQL的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正是当前使用MySQL的开发人员面临的问题。

4、为什么用NoSQL? 
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。 
我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。

二、什么是NoSQL?

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”, 泛指非关系型的数据库。

1、作用 
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。 
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,这得益于它的无关系性,数据库的结构简单。 
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。

2、关系型数据库(RDBMS)VS 非关系型数据库(NoSQL) 
RDBMS:

  • 高度组织化结构化数据
  • 结构化查询语言(SQL)
  • 数据和关系都存储在单独的表中。
  • 数据操纵语言,数据定义语言
  • 严格的一致性
  • 基础事务

    NoSQL:

  • 代表着不仅仅是SQL
  • 没有声明性查询语言
  • 没有预定义的模式
  • 键 - 值对存储,列存储,文档存储,图形数据库
  • 最终一致性,而非ACID属性
  • 非结构化和不可预知的数据
  • CAP定理
  • 高性能,高可用性和可伸缩性

总结: RDBMS 和NoSQL都有各自的特点和使用的应用场景,让关系数据库关注在关系上,NoSQL关注在存储上。

三、互联网时代面临的问题

1、3V 和 3高 
3V: 海量的数据流量;多样(商品种类、各式各样);实时的数据需求 
3高: 高并发;高可用;高性能

四、NoSQL 数据模型简介 
传统的关系型数据模型的设计基本上是 基于数据库范式建立1:1 / 1:N / N:N,主外键的关系设计。 
1、NoSQL的设计: 
使用Bson() 类似于json的一种二进制形式的存储格式,简称 Binary JSON,它也同样支持内嵌的文档对象和数组对象。 
2、聚合模型 
高并发的操作是不太建议有关联查询的,互联网公司用冗余数据来避免关联查询,分布式事务是支持不了太多的并发的。 
3、NoSQL数据库的四大分类: 
①KV键值对:redis,内容缓存,主要用于处理大量数据的高访问负载等; 
②bson:文档数据库,MongoDB 是一个基于分布式文件存储的数据库,C++编写的。皆在为web应用提供可扩展的高性能数据存储解决方案。它介于关系型数据库与非关系型数据库之间的产品,是非关系型中功能最丰富的,且最像关系型数据库的; 
③列存储数据库:分布式文件系统 
④图关系型数据库 :它不是放图的,放的是 关系:如朋友圈社交网络等。专注于关系图谱。

参考:互联网背景下为什么会出现NoSQL? - CSDN博客
https://blog.csdn.net/u013709087/article/details/78313923

 

为什么会出现NoSQL数据库的更多相关文章

  1. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  2. 关系型数据库与NoSQL数据库

    关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...

  3. 几款主流 NoSql 数据库的对比

    最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...

  4. NoSql数据库初探-mongoDB环境搭建

    NoSQL数据库一改关系型数据库的缺点,更容易的集成.分布式.无模式.故障恢复等特点,正在一步步餐食关系型数据库的市场,作为一个与时俱进的码农了解一下新技术是必须的,尤其是在读了<NoSql精粹 ...

  5. 小型单文件NoSQL数据库SharpFileDB初步实现

    小型单文件NoSQL数据库SharpFileDB初步实现 我不是数据库方面的专家,不过还是想做一个小型的数据库,算是一种通过mission impossible进行学习锻炼的方式.我知道这是自不量力, ...

  6. .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) 与 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB中,介绍了LiteDB的基本使用情况以及部 ...

  7. NoSQL数据库笔谈(转)

    NoSQL数据库笔谈 databases , appdir , node , paper颜开 , v0.2 , 2010.2 序 思想篇 CAP 最终一致性 变体 BASE 其他 I/O的五分钟法则 ...

  8. NOSQL 数据库 CodernityDB

    CodernityDB 是一个开源的纯 Python 实现的.无第三方依赖.支持多平台的 NoSQL 数据库. 关键特性: 纯 Python 开发 支持多索引 快速 (每秒将近10万的写入和超过10万 ...

  9. NoSQL数据库介绍

    NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...

  10. 2013最常用的NoSQL数据库

    摘要:与关系数据库相比,每个NoSQL都有自己不同的适用场景,这里带大家盘点文档数据库.图数据库.键值数据存储.列存储数据库与内存数据网络等领域的常用的NoSQL. 在几年内,NoSQL数据库一直以性 ...

随机推荐

  1. Unity 编辑器学习(四)之 静态游戏物体

    一.Static GameObjects 关于静态对象的信息往往可以预先在编辑器里计算,不需要实时计算,进而优化性能,明显降低DrawCall. 各种Static说明: Lightmapping: 用 ...

  2. [Recompose] Merge RxJS Button Event Streams to Build a React Counter Component

    Combining input streams then using scan to track the results is a common scenario when coding with s ...

  3. 同一个事务里 查询 已删除可是未提交的数据[bug记录]

    前几天犯了个低级错误.在一个事务方法里老是查询不到某条记录,可是debug卡住时,用db工具查.又能查出值. 经过一番折腾,原来是我在同一个事务里 查询 了已删除可是未提交的数据.当然查询不到了! . ...

  4. lightoj--1116--Ekka Dokka(水题)

    Ekka Dokka Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit Stat ...

  5. Vsftp问题及解决办法汇总(持续增加中)

    1.VsFTP出现500 OOPS: cannot change directory的解决办法 在安装完vsftp服务后登陆时可能遇到cannot change directory后面是登陆者的目录的 ...

  6. spring security oauth2 架构---官方

    原文地址:https://projects.spring.io/spring-security-oauth/docs/oauth2.html Introduction This is the user ...

  7. 洛谷P3355 骑士共存问题

    题目描述 在一个 n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入 对于给定的 n*n 个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置 ...

  8. Python(一) 基本类型

    前言: 什么是代码? 代码是现实世界事物在计算机世界中的映射. 什么事写代码? 写代码是将现实世界中的事物用计算机语言来描述. 一.数字:整形与浮点型 整型:int 浮点型:float (没有单精度和 ...

  9. TwinCAT 3中基于UDP协议通讯的C++实现

    因为项目需要,学习了TwinCAT3中使用UDP协议进行通讯的基本知识.这个做个简单的笔记,方便以后查询. 1 概述 倍福为了实现从实时环境中直接访问网卡(network cards)专门提供了一个函 ...

  10. ES6学习笔记(十)代理器Proxy

    Java可以使用面向切面(AOP)的方法来实现某些统一的操作,比如某个操作的前置通知,后置通知等等,这种操作非常方便,其本质便是动态代理,JS的代理Proxy代理该如何使用呢? 某位大神的实现如下: ...