java - 分布式 - nosql

首先: NoSql = not only sql  。。。    估计第一次见的就我一个觉得是不用sql。。。html

1. NoSql泛指非关系数据库。(mysql,oracle 都是经典的关系数据库)mysql

 

2. 关系型数据库 和 非关系数据库 最简单的区别:redis

关系型数据库是有行列的,栅格结构。spring

非关系型不用行列结构存储数据。而是其余形式储存数据:好比key value键值对,列,BSON,图 等结构sql

 

3.非关系型 vs 关系型数据库

非关系型数据库的优势:缓存

1. nosql能够直接存储对象,图片等,并且更利于扩展,添加缓存,分布式存储。(关系数据库有表关系,join,外键一类的,致使牵一线而动全身,分布式存储会很困难)服务器

2. nosql读写更快。 (关系数据库须要用同时更新索引因此会比较慢)架构

关系型数据库的优势:oracle

1. 由于有索引因此查询更快

2. 标准化的表结构保证了数据的一致性,使得事务逻辑更清晰。

3. 可使用join等复杂查询。

4. 并且发展时间长,更加稳定可靠。

 

为何使用NoSql

1. 

传统网站架构:

数据库 - spring(dio, service) - springMVC(controller) - view(jsp/html)

随着用户访问量增长,一个数据库可能没法处理那么多数据,须要改进

解决:

1. 添加cache(缓存), 处于dal和数据库之间,把常用的数据直接从缓存中读取而不是重复数据库查询。

2.主从分离,读写分离。  在不一样数据库上设立主表和从表,主表存常常修改的数据(好比商品评价),从表存只读不写的数据(好比淘宝的用户帐号信息,商品基本信息)。

3.分布式集群。 使用分布式(简单说就是把一个工程的数据分布到不少个服务器上)用多个服务器用来存储数据。(好比一个专门存客户,一个专门存商家,一个专门存商品等)

4. 后来随着数量愈来愈大,关系型数据库在分布式方面的弱势愈来愈明显,因此出现了NoSql

 

因为Nosql修改快,mysql查询快,因此目前主流结构是:Nosql 和 mysql 结合。

商品基本信息:mysql

商品描述(大字段):MongDB

商品图片:文件存储数据库TFS

商品热搜高频字段:内存数据库(redis)

 

数据库事务特色:

传统数据库ACID:

Atomic(原子性)
Consistency(一致性)
Isolation(隔离性)
Durability(持久性)

 

CAP:

CA P原则又称CAP定理,指的是在一个 分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼(3选2)。
一致性(C):在分布式系统中的全部数据备份,在同一时刻是否一样的值。(等同于全部节点访问同一份最新的数据副本)
可用性(A):在集群中一部分节点故障后,集群总体是否还能响应客户端 的读写请求。(对数据更新具有高可用性)
分区容忍性(P):以实际效果而言,分区至关于对通讯的时限要求。系统若是不能在时限内达成数据一致性,就意味着发生了分区的状况,必须就当前操做在C和A之间作出选择。

mysql 等数据库就是CA类型

redis,MongDB等是CP

CouchDB是AP原则。

大多数网站开发遵循AP原则:

由于分布式系统中,分区是必须的,因此P锁定了。

而后可用性确定要一直保证。

 

而为了解决一致性,采用用BASE的原则:

基本可用(basically available):保证C

软状态(soft state):数据能够暂时性不一致

最终一致(eventually consistent):在最后的时候保持一致

好比双11,为了减小压力,能够容许一些数据不一致(好比你在双11的 0 点买了一个商品,60%的人都是在那1分钟内点下单,因此先只更新客户表和库存表,让你知道你买了。可能商家的表里还没更新,他还不知道你买了)。等过了高峰后再同步各个分布式数据库的数据。

相关文章
相关标签/搜索