系统架构从RDBMS到NoSQL的演变
浏览:310 时间:2021-9-18

在互联网时代背景下的大好机会,为什么要使用nosql

1单机MySQL的极客

在20世纪90年代,一个网站一般不是很受欢迎,很容易应对单个数据库。

那时,更多的是静态网页,并且没有很多网站具有动态交互类型。

在上述架构下,让我们看一下数据存储的瓶颈?

1.数据卷的总大小不适合机器

2.数据索引(B + Tree)不能存储在机器中

3.访问(读写混合)一个实例是不能容忍的

如果出现上述1或3个瓶颈,架构就会开始发展到下一个阶段:

2 Memcached(缓存)+ MySQL +垂直拆分

随后,随着访问次数的增加,几乎所有使用MySQL架构的网站都开始在数据库上出现性能问题。 Web应用程序不再仅仅关注功能,还关注性能。程序员已经开始使用大量的缓存技术来缓解数据库的压力并优化数据库的结构和索引。通过文件缓存来缓解数据库的压力很受欢迎,但是当访问次数持续增加时,无法通过文件缓存共享多个Web机器,并且大量小文件缓存也会带来更高的IO压力。在这个时候,Memcached自然成为一种非常时尚的科技产品。

作为单独的分布式缓存服务器,Memcached为多个Web服务器提供共享的高性能缓存服务。在Memcached服务器上,它基于哈希算法开发了多个Memcached缓存服务的扩展。一致的哈希解决了增加或减少缓存缓存服务器的缺点导致重新哈希引起的大量缓存失效

限制:Memcached只能减轻数据库的阅读压力。无法缓解大量写入的应用场景。

3 Mysql主从分离(

由于数据库上的写压力增加,Memcached只能缓解数据库的读取压力。读写都集中在一个数据库上,使数据库不堪重负。大多数网站使用主从复制技术来实现读写分离,以提高读写性能和读取库可扩展性。 Mysql的主从模式成为该站点的标准。

4子数据库子库+横向拆分+ mysql集群

在Memcached的缓存中,MySQL的主从复制,读写分离,当MySQL主库的写压力开始出现瓶颈,并且数据量继续飙升,因为MyISAM使用表锁,在高并发下会有严重的锁定问题,大量高并发MySQL应用程序开始使用InnoDB引擎而不是MyISAM。

PS:MyISAM引擎使用表锁,InnoDB引擎使用行锁

同时,使用子表来缓解写压力和数据增长的扩展问题已变得很流行。此时,子数据库成为一项热门技术,热门的访谈问题也是业界讨论的热门技术问题。此时,MySQL引入了一个不够稳定的表分区,这也为具有一般技术实力的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但其性能并不能满足互联网的要求,但它为高可靠性提供了非常大的保证。

子库:将与业务相关的数据表放在同一个库中。同时,您还可以根据冷热数据和相关性划分库。

当同一表中的数据量很大时,还需要子段表。例如,记录ID1-100000进入1号库,100001-200000进入2号库。 。 。

5 MySQL可扩展性瓶颈

MySQL数据库通常还存储大型文本字段,从而产生非常大的数据库表。进行数据库恢复时,速度很慢,快速恢复数据库并不容易。例如,1000万个4KB文本接近40GB。如果你可以从MySQL保存这些数据,那么MySQL将变得非常小。关系数据库功能强大,但它们不能很好地处理所有应用程序场景。 MySQL的可扩展性差(需要复杂的技术实现),大数据下的IO压力,表结构变化都很困难,是目前开发人员使用MySQL所面临的问题。

还有视频,大图片等,传统的关系数据库不适合作为数据存储的解决方案。

6今天是什么样的?

负载平衡—— Nginx

App server—— Tomcat

数据库(集群)— — Mysql,Oracle

缓存,Hadoop集群,实时通信服务器,流媒体服务器,电子邮件,图像服务器等。

7为什么要使用NoSQL

为什么要使用NoSQL?

今天,我们可以通过第三方平台(例如Google,Facebook等)轻松访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志成倍增加。如果我们想挖掘这些用户数据,那么SQL数据库就不再适合这些应用程序,而NoSQL数据库的开发可以很好地处理这些大数据。

描述人与人之间关系的社交数据不适合存储和处理与此类数据相关的传统数据。

2. NoSQL概述——四点

1它是什么

NoSQL(NoSQL=Not Only SQL),意思是“而不仅仅是SQL”,

指非关系数据库。随着Internet web2.0网站的兴起,传统的关系数据库正在应对web2.0网站,特别是超大规模,高并发的SNS类型web2.0纯动态网站已经变得无能为力,暴露出许多难以克服的问题。非关系数据库由于其自身的特点而迅速发展。创建NoSQL数据库是为了解决大规模数据收集的多种数据类型带来的挑战,特别是大数据应用程序问题,包括大规模数据的存储。

(例如,谷歌或Facebook每天为其用户收集数万亿比特的数据)。这些类型的数据存储不需要固定模式,并且可以在没有不必要的操作的情况下扩展。

2我该怎么办?

1.易于扩展

NoSQL数据库种类繁多,但常见的功能是删除关系数据库的关系性质。

数据之间没有关系,因此很容易扩展。同样无形,它在架构层面带来了可扩展的功能。

2.高数据量和高性能

NoSQL数据库具有非常高的读写性能,尤其是在大数据量的情况下。

这是由于它的非关系和数据库的简单结构。

通常,MySQL使用查询缓存,每个表的更新缓存无效。它是一个大粒度的Cache,

在频繁与Web 2.0交互的应用程序中,缓存性能不高。 NoSQL的缓存是记录级的,

是一个细粒度的Cache,所以NoSQL在这个级别上更强大

Redis每秒写入80,000次,读取次数为110,000次

3.多样化和灵活的数据模型

NoSQL可以随时存储自定义数据格式,而无需为要存储的数据创建字段。在关系数据库中,

添加和删​​除字段是一项非常麻烦的任务。如果它是一个非常大量的数据,添加一个字段只是一场噩梦

4.传统的RDBMS VS NOSQL

RDBMS与NoSQL

RDBMS

- 高度组织的结构化数据

- 结构化查询语言(SQL)

- 数据和关系存储在单独的表中。

- 数据操作语言,数据定义语言

- 严格的一致性

- 基本事务

NoSQL的

- 代表不仅仅是SQL

- 没有声明性查询语言

- 没有预定义的模式

-key - 值对存储,列存储,文档存储,图形数据库

- 最终一致性,而不是ACID属性

- 非结构化和不可预测的数据

- CAP定理

- 高性能,高可用性和可扩展性

3去哪里

Memcached:但就缓存而言,最快的是memcached

Redis:但数据类型丰富,redis和tair(Ali,Meituan)更好

mongodb的

4怎么玩

KV——键值对

高速缓存——高速缓存

持久性——持久性

3.互联网数据3V和3高和当前NoSQL经典应用

(1)3V和3高

3V

质量体积

品种多样

实时速度

3高

高并发性

高度可扩展性 - ——水平附加CPU或机器,构建阵列或集群。

高性能

(2)当前的NoSQL经典应用程序

NoSql应用程序解决方案的所有方面的解决方案:这是一个从不同的地方看一个脚本的例子,我感觉很好,所以这里列出了大纲,我不会写。

1冷数据,常数数据,如商品的基本信息,存储在关系数据库中。

2产品描述,细节,评估信息(多文本类),存储在MongoDB中。

多文本信息描述类,IO读写性能更差

文档数据库MongDB

3张产品图片

产品图像显示类

分布式文件系统

淘宝自己的TFS

谷歌的GFS

Hadoop HDFS

4产品关键词

搜索引擎,用于淘宝

ISEARCH

5带状热点产品的高频信息

内存数据库

Tair,Redis,Memcache

例如,在情人节期间,电子商务网站上的巧克力,玫瑰等将成为热门搜索,这将被放置在redis缓存中。

6商品交易,价格计算和积分累积

外部系统,外部第三方支付界面

(3)总结大规模Internet应用程序(大数据,高并发,多种数据类型)的难点和解决方案

难点

数据类型多样性

数据源多样性和变更重构

数据源转换和数据服务平台不需要大面积重建

溶液

EAI和统一数据平台服务层

阿里和淘宝做了什么? UDSL(统一数据平台服务层)

4. NoSQL数据模型简介

(1)比较与电子商务客户,订单,订单和地址模型的关系

(2)数据库和非关系数据库

1您如何设计传统的关系数据库?

ER图(1: 1/1: N/N: N,主外键等)

2 nosql你如何设计

什么是BSON:BSON()是类json的二进制形式存储类,称为二进制JSON,

它支持嵌入式文档对象和数组对象,如JSON

为学生提供他们使用BSon构建的数据模型

3对比,问题和困难

为什么可以使用聚合模型处理上述情况

对于关联查询,建议不要高度并发操作,

(3)互联网公司使用冗余数据来避免相关查询

分布式事务不能支持太多的并发性

按BSon查询

(4)聚合模型

KV键值

BSON

列族

顾名思义,数据存储在列中。最大的特点是可以方便地存储结构化和半结构化数据,以便轻松进行数据压缩,

对一列或多列的查询有一个非常大的IO优势。

5.四类NoSQL数据库

(1)KV键值:典型介绍

新浪:BerkeleyDB + redis

美国代表团:redis + tair

阿里,百度:memcache + redis

(2)文档类型数据库(bson格式更多):典型介绍

CouchDB的

MongoDB的

MongoDB是一个基于分布式文件存储的数据库。用C ++编写。旨在为Web应用程序提供可扩展的高性能数据存储解决方案。

MongoDB是关系数据库和非关系数据库之间的产品。它是非关系数据库中功能最多,关系最密切的数据库。

(3)列存储数据库

卡桑德拉,HBase

分布式文件系统

(4)图形关系数据库

它不是图形,它是一种关系,如朋友社交网络的:圈,广告推荐系统

社交网络,推荐系统等。专注于建立关系图

Neo4J,InfoGrid

(5)四方比较

6. CAP原则CAP + BASE

在分布式数据库中

1.什么是传统的ACID?

A(原子性)原子性

C(一致性)一致性

我(隔离)独立

D(持久性)持久性

关系数据库遵循ACID规则

交易是英语交易,类似于现实世界中的交易。它具有以下四个特征:

1.(原子性)原子性

原子性很容易理解,也就是说,事务中的所有操作都已完成或未完成。交易的成功是交易中的所有操作都是成功的。只要一个操作失败,整个事务就会失败并需要返回。滚。例如,银行转账,从A账户到100元到B账户,分为两步:1)从A账户拿100元; 2)存入100元到B账户。这两个步骤要么一起完成要么一起完成。如果只是第一步完成而第二步失败,那么钱将莫名其妙地低于100元。

2,C(一致性)一致性

一致性也更容易理解,这意味着数据库应始终处于一致状态,并且事务的操作不会更改数据库的原始一致性约束。

3.我(隔离)独立

所谓独立意味着并发事务不会相互影响。如果一个事务要访问的数据被另一个事务修改,只要没有提交另一个事务,它访问的数据就不会受到未提交事务的影响。 。例如,如果有从A账户到100账户到B账户的交易,如果交易尚未完成,如果B此时查询自己的账户,则不会看到新增加的100元

4. D(持久性)持久性

持久性意味着一旦提交了事务,即使出现停机,它所做的更改也将永久存储在数据库中。

2.什么是CAP

C:一致性

一个:可用性

P:分区容差

3. CAP三只能满足两个!!! (第3章第2条)

CAP理论意味着在分布式存储系统中,最多可以实现上述两点。

而且因为当前的网络硬件肯定会出现延迟丢包等问题,所以

分区容差是我们必须实现的。

所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统可以同时保证这三点。

========================================================================

C:强一致性A:高可用性P:分布式容差

CA传统Oracle数据库

AP选择大多数网站架构

CP Redis,Mongodb

注意:在选择分布式架构时,您必须进行权衡。

一致性和可用性之间的平衡。过多的Web应用程序不需要强大的一致性。

所以牺牲C代表P,这是当前分布式数据库产品的方向

========================================================================

一致性和可用性的选择

对于Web 2.0站点,关系数据库的许多主要功能通常都是无用的

数据库事务一致性要求

许多Web实时系统不需要严格的数据库事务,并且对读取一致性的要求很低。在某些情况下,写入一致性要求不高。允许最终的一致性。

数据库实时写入和读取实时要求

对于关系数据库,在插入数据后立即查询肯定可以读出数据,但对于许多Web应用程序,不需要如此高的实时性能,例如,在发送消息后,几秒钟后即便在十几秒后,我的订阅者看到这种动态完全可以接受。

需要复杂的SQL查询,尤其是多表关联查询

任何大型数据量Web系统都非常嫉妒多个大型表关联查询,以及复杂的数据分析类型报告查询,特别是SNS类型的网站,从需求和产品设计的角度来避免这种情况。生产。通常更多的是单个表的主键查询,以及单个表的简单条件页面查询,SQL的功能被大大削弱。

4.经典CAP地图

CAP理论的核心是分布式系统不能同时满足一致性,可用性和分区容错的三个要求,

充其量只能同时满足两个。

因此,根据CAP原则,NoSQL数据库分为三类:满足CA原则,满足CP原则,满足AP原则:

CA - 单点集群,一种满足一致性和可用性的系统,在可伸缩性方面通常不那么强大。

CP - 满足一致性和分区容差的系统,通常性能不是特别高。

AP - 满足可用性,分区容差的系统,通常可能具有较低的一致性要求。

注意:Nosql的实际使用是AP

5.什么是BASE?

BASE是一种解决由关系数据库的强一致性引起的问题引起的问题的解决方案。

BASE实际上是以下三个术语的缩写:

基本可用

软状态

最终一致

它的想法是通过让系统在某个时刻放松对数据一致性的要求来改变系统的整体可扩展性和性能。你为什么这么说?原因在于,由于地理分布和极高的性能要求,大型系统通常不可能采用分布式交易来完成这些指标。为了获得这些指标,我们必须用另一种方法来完成它们。解决这个问题的方法

6.分布式+集群简介

(1)分布式系统

分布式系统

它由多台计算机和通过计算机网络连接(本地网络或广域网)通信软件组件组成。分布式系统是建立在网络之上的软件系统。由于软件的性质,分布式系统具有高度凝聚力和透明性。因此,网络和分布式系统之间的差异在于高级软件(尤其是操作系统)而不是硬件。分布式系统可以应用于不同的平台,例如:PC,工作站,局域网和广域网。

海瑶seo工程师只是说:

1分布:不同的服务模块(工程)部署在不同的服务器上。他们在Rpc/Rmi之间进行通信和呼叫,以提供外部服务和组内协作。

2集群:不同的服务器部署在不同的服务器上,分布式调度软件用于统一调度,提供外部服务和访问。