1. 数据库为什么要算范式?

细说起来太多。 范式解决了数据冗余,从而保证ACID的操作性能。
不然一堆删除异常,插入异常,就没法愉快的写SQL了

另外,对于多个业务公用的数据库,范式解决了集成的问题。

2. 海量数据了,数据库对此做了哪些优化?
    a. 分表,横向划分+纵向划分 (mysql集群)。
    b. share-disk 架构 (oracle的rac 集群),性能受到share里disk的限制.

3. 但是还不够,问题的根本是什么
    范式的限制太多,没有了数据冗余,那么每次操作就需要做关联。
    对分布式集群来说,关联的节点越多延迟越高,join等操作仍然需要将大表数据传输到小表机器上做计算。

4.  对范式的吐槽不是一天两天了,业界整了个聚合的方式来替代关系元组。
    优点: 聚合更简单,更直接,更容易表达。(不需要join等关联操作, 就非常适合分布式集群)。
    缺点: 但是由于冗余,一次修改,需要对应到N个实体。(非常之不适合ACID)。
    ps:其实关系型数据库也是朝聚合方向做出了优化的,比如————>物化视图。

5.  性能上去了 ACID就出问题了
    很好理解:分布式的可用性--------->数据的复制和分片---------->数据冗余---------->数据不一致
    比如:复制(3份)和分片(同机架不同机器一个备份, 不同机架再一个备份)。

6.  其实ACID很做作,其实重点在于原子性,转化成如下的问题描述
    a. 写冲突。
            1,中心节点模式下,多个写的怎么排序问题。
            2,无中心节点模式下,多个写并发的问题(仲裁问题)。
    b. 读写冲突。
    c.  数据持久性。

7. 解决方式:
   6.a.1 写排序问题(中心节点来决定排序,然后按顺序写多个副本)
    6.a.2 写并发的仲裁问题:
    写入仲裁: 写入成功的数目>复制因子的一半 即 W > N/2,这个好理解。
    读取仲裁:如果写N个副本,写W个算成功,就是允许N-W个失败。最坏的情况下, 你要
读至少N-W+1个数据才可以。
    放宽条件就变成了:R + W >= N  - W + 1 + W = N +1 > N ====== > R+W>N
    
    6.b 解决不了,让我们学会妥协。会话一致性,最终一致性。
    6.c 数据持久性(WAL方式)

7. 好奇一下,为啥不能完全解决?
    通俗的说:数据量大了,就得上分布式集群,不然搞不定。
   可是,冗余导致一致性很差,不冗余吧,可用性和性能都上不去。
    
   学术地说就是CAP定理。原始的CAP定理里3选2的说法其实不好理解。
    实际上可以理解成: 系统会遭遇分区情况时,我们只能在可用性和一致性中间做权衡。
    思考可用性和一致性,不如思考一致性和延迟中如何取舍。

PS:
    1.BASE比ACID更做作,基本可用和柔性状态也没有明确的定义。
    2.并不是所有的NoSQL都是为分布式诞生的,图数据库采用的是传统数据库的方式。
    3.列族存储,可以当成是2级聚合来理解。
    4.可用性的理解:
            有中心节点的系统,当某个节点挂掉,仍然可以正常工作。
            无中心节点的系统,当系统出现脑裂(brain split),系统仍然能工作

从数据库到NoSQL思路整理的更多相关文章

  1. 非关系型数据库(NoSql)

    最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...

  2. Xshell连接mysql数据库乱码问题解决思路总结

    乱码问题一直是一件让人头疼的事情,乱码就是编码格式不统一产生的,下面将一些常见的解决思路整理: 先Xshell连接上数据库,查看数据的编码格式: 一般需要看这么几个地方(附修改命令): 1.数据库的编 ...

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

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

  4. 关系型数据库与NOSQL

    本文转载自: http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) ...

  5. 关系型数据库与NOSQL(转)

    出处:http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html 关系型数据库把所有的数据都通过行和列的二元表现形式表示出来. 关系 ...

  6. Angular2发布思路(整理官网Deployment页面)

    本文是按着ng2官网的高级内容“Deployment”的思路整理得出的,原文虽然在angular2的中文站下挂着,截止目前却还是英文版未翻译,笔者就在这里结合自己的理解给出原文的一点点整理.这是原文地 ...

  7. 关系型数据库和NOSQL数据库对比

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt328 关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概 ...

  8. 关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别

    简介 关系型数据库管理系统(RDBMS)是建立在关系模型基础上的数据库,主要代表有:Microsoft SQL Server,Oracle,MySQL(开源). 非关系型数据库(NoSQL),主要代表 ...

  9. 关系型数据库 VS NOSQL

    转载:https://mp.weixin.qq.com/s/FkoOMY8_vnqSPPTHc2PL1w 行式数据库(关系型数据库) 行式数据库有如下几个缺点: 大数据场景下 I/O 较高,因为数据是 ...

随机推荐

  1. HTML CSS + DIV实现整体布局 part2

    9.盒模型的层次关系 我们通过一个经典的盒模型3D立体结构图来理解,如图:     从上往下看,层次关系如下: 第1层:盒子的边框(border),     第2层:元素的内容(content).内边 ...

  2. Scripting API Samples

      Scripting API Samples Tomáš Matoušek edited this page on Jan 31 · 32 revisions Home API Changes Bu ...

  3. c pointer

    1. 定义数组后,数组名是一个常数, 而指针是一个变量 如下: int a[10]; int *p; p=a; \\ 与 p=&a[0]等价 则*p++表示 a[1] 而 a++  则是错误的 ...

  4. Mysql修改密码办法

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...

  5. 可重入函数reentrant function

    可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数:而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能 ...

  6. SpringBoot中使用消息中间件Kafka实现Websocket的集群

    1.在实际项目中,由于数据量的增大及并发数的增多,我们不可能只用一台Websocket服务,这个时候就需要用到Webscoket的集群.但是Websocket集群会遇到一些问题.首先我们肯定会想到直接 ...

  7. 13-matlab图片转化

    图片格式: 处理函数: rgb2gray() gray2rgb()

  8. 解决mysql无法远程登陆问题

    解决这个问题的思路: 一.先确定能过3306端口 二.再检查授权Host是否存在 (新授权记得flush privileges;)   一 步骤 1.首先打开mysql的配置文件,找到这句话,注释掉. ...

  9. Spring依赖注入servlet会话监听器

    Spring提供了一个 “ContextLoaderListener” 监听器,以使 Spring 依赖注入到会话监听器. 在本教程中,通过添加一个 Spring 依赖注入一个bean 到会话监听器修 ...

  10. jmeter完成数据批量添加

    Jmeter结构如图 目的: 需要在每个组织下面分别添加5个设备资源 思路: 1.先登录平台 2.进入系统配置页面 3.获取到每个区域的ID 4.在每个区域下面添加设备资源 重点及难点: 1.登录加密 ...