redis学习笔记-02:为什么使用NoSQL数据库
一、第一代:单机版的MySQL
1、静态网页,动态交互类型的网站不多。
2、架构:APP---->DAL---->MySQL Instance
3、数据存储的瓶颈:
(1)数据量总大小超过机器的内存
(2)数据的索引和数据量的大小超过机器的内存
(3)访问量(读写混合)超过一个实例承受的范围
二、Memcached(缓存)+MySQL+垂直拆分
1、随着访问量的上升,使用MySQL架构的网站会出现性能问题。web程序不能只关注功能的实现,还要追求性能,于是使用缓存技术来缓解数据库的压力。如果频繁查询的是一些常用的数据,那么可以把数据放在缓存中,减轻数据库被访问的压力。
2、架构:APP---->DAL---->Cache---->(MySQL Instance1,MySQL Instance2,MySQL Instance3 ...)
3、一个MySQL数据库装不下数据,那么通过多个MySQL实例来分担数据。
三、MySQL主从复制,读写分离
1、为了提高数据库容灾能力,主库插入一条数据,从库也会相应的新增数据。
2、随着数据库的写入压力增加,Memcahed只能缓解数据库的读取压力,读写集中于一个数据库会让数据库不堪重负。
3、于是采用主从复制技术来达到读写分离,比如多个MySQL数据库,主库(master)一个用来写,从库(slave)多个用来读,即master-slave模式。
4、架构: APP---->DAL---->Cache---->MySQL Master---->(MySQL Slave1,MySQL Slave2 ...)。
四、分表分库+水平拆分+mysql集群
1、在Memcahed的高速缓存、MySQL主从复制和读写分离的基础上,这时MySQL主库的写压力出现瓶颈。
2、于是流行使用分表分库来缓解写压力和数据量增长的扩展问题。
3、分库是指:尽量做到低耦合,与业务高度相关的、频繁的、活跃的数据放在一个库,低相关的放在另一个库。分表是指把海量的数据分开来写入。
4、多个MySQL主从构成MySQL-Cluster集群。架构:APP---->DAL---->Cache---->((MySQL M1 ,MySQL S11,MySQL S21 ...),(MySQL M 2,MySQL S21,MySQL S22 ...)... )。
五、NoSQL数据库(Not Only SQL)
1、NoSQL数据库泛指非关系数据库,NoSQL数据库的产生是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括大规模数据的存储。
2、NoSQL数据库中的数据进行存储时不需要固定的模式,去掉了关系,无需多余操作就可以横向扩展。
3、MySQL等关系型数据库在应付web2.0网站,特别是超大规模和高并发的web2.0纯动态网站显得力不从心,促成了NoSQL数据库的发展。
六、NoSQL数据库中的CAP原理
1、传统关系型数据库中的ACID:
(1)A:原子性(Atomicity),事务中所有操作要么全部完成,要么都不做,事务成功的条件是事务中所有的操作都功能,只要有一个操作失败,整个事务就失败,需要回滚。
(2)C:一致性(Consistency),数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
(3)I:独立性(Isolation),并发的事务之间不会相互影响,如果有一个事务要访问的数据正在被另一个事务修改,只要另一个事务未提交,它所访问的数据就不受未提交事务的影响。
(4)D:持久性(Durability),一旦事务提交后,它所做的修改会永久地保存在数据库上。
2、NoSQL的CAP:
(1)C:强一致性(Consistency),A:可用性(Availability),P:分区容错性(Partition tolerance)
(2)理论核心:一个分布式系统不可能同时很好的满足强一致性、可用性和分区容错性这三个需求,只能三选二。分区容错性是必须要实现的,只能在一致性和可用性之间权衡。根据CAP原理将NoSQL数据库分为满足CA原则、满足CP原则和满足AP原则三大类。
(3)CA:单点集群,满足一致性和可用性的系统,通常在可扩展性上不太强大。传统的Oracle数据库
(4)CP:满足一致性、分区容错性的系统,通常性能不是特别高。redis,mongdb。
(5)AP:满足可用性和分区容错性的系统,通常对一致性要求低一些。大多数网站架构的选择,保证网站不要挂掉。很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有时对写一致性的要求也不高,运行实现最终一致性。
3、NoSQL的BASE:
(1)BASE就是为了解决关系数据库强一致性而导致可用性降低而提出的解决方案,它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。
(2)BA:基本可用(Basically Available),S:软状态(Soft State),E:最终一致性(Eventually Consistence)。
4、分布式和集群
(1)分布式:不同的多台服务器上面部署不同的服务模块,他们之间通过Rpc/Rmi实现通信和调用,对外提供服务和组内协作。
(2)集群:不同的多台服务器上面部署相同的服务模块,通过分布式的调度软件进行统一的调度,对外提供服务和访问。
redis学习笔记-02:为什么使用NoSQL数据库的更多相关文章
- Redis学习笔记(1)—— NoSQL&Redis简介
一.NoSQL概述 1.1 什么是NoSQL NoSQL(NoSQL = Not Only SQL),意指“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库. 1.2 为什么需要NoSQ ...
- Redis学习笔记三:多机数据库的实现
1.复制 执行slaveof命令或者设置slaveof选项,让一个服务器去复制另外一个服务器. 旧版复制功能的实现(Redis 2.8 之前的版本) 复制功能分为同步和命令传播两个操作. 同步(syn ...
- redis学习笔记-02 list列表类型命令
一.lpush key value1 value2 value3 value4(命令将一个或多个值插入到列表头部. 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作) lpush k1 ...
- Redis:学习笔记-02
Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...
- Redis学习笔记~目录
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...
- Redis学习笔记(3)——Redis的命令大全
Redis是一种nosql数据库,常被称作数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted se ...
- Redis学习笔记(1)——Redis简介
一.Redis是什么? Remote Dictionary Server(Redis) 是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- Redis学习笔记一:数据结构与对象
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...
随机推荐
- Deeplearning.ai课程笔记-结构化机器学习项目
目录 一. 正交化 二. 指标 1. 单一数字评估指标 2. 优化指标.满足指标 三. 训练集.验证集.测试集 1. 数据集划分 2. 验证集.测试集分布 3. 验证集.测试集大小 四. 比较人类表现 ...
- 2019牛客暑期多校训练营(第七场)A String (字符串的最小表示)
思路 这题思路如果是递归的话,应该是比较正确的.但是实际上只用切割两次就可以了. 先把原串从后向前切割一次,再把每一部分切割一次. 切两次的思路实际上是有漏洞的. 递归的思路,终点是,如果串长为1,或 ...
- 三分钟让你秒懂.Net生态系统
提到.Net的时候,大多数人的第一反应可能就是.Net Framework和Visual Studio..Net Framework的第一个版本发布与2002年2月13日,这对于科技发展日新月异的时代 ...
- IDEA中常用优化设置
1.设置鼠标悬浮提示 Editor->General 这里要勾选下,后面设置的是延迟时间 默认半秒:设置后,我们鼠标移动到类上看看: 2.显示方法分隔符 Editor->General - ...
- java_1:为什么我一搞PHP的要转JAVA
为什么我一搞PHP的要高JAVA? 没什么!就他妈逼的看不惯搞JAVA那群逼鄙视PHPer的样!你会JAVA,稍微发功老子一样搞!
- techiediaries网站的Laravel 6系列教程
Laravel 6 Tutorial & New Features - Build a CRM [PART 1] Laravel 6 REST API CRUD Tutorial - Buil ...
- Pandas的Categorical Data类型
pandas从0.15版开始提供分类数据类型,用于表示统计学里有限且唯一性数据集,例如描述个人信息的性别一般就男和女两个数据常用'm'和'f'来描述,有时也能对应编码映射为0和1.血型A.B.O和AB ...
- 最全BT磁力搜索引擎索引(整理分享,每日更新)
btaa.xyz:http://www.veee.xyz/(可以访问,知名的BT磁力搜索,资源多,建议手机访问) 以下无法访问 idope.se:https://idope.se/(无法访问,资源丰富 ...
- 人工神经网络(从原理到代码) Step 01 感知器 梯度下降
版权声明: 本文由SimonLiang所有,发布于http://www.cnblogs.com/idignew/.如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任. 感知器 ...
- java判断字符串是否是数字
正则表达式 代码如下: public static boolean isNum(String num){ return num.matches("(\\s)*([+-])?(([0-9]*\ ...