NoSql入门概述

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 首先应该说的是:所有天上飞的理念都会有落地实现。所以我觉得还是从数据存储处理的发展简史来引入NoSQL更为贴切,也能让自己有更细致的认识。数据存储与处理技术的发展有这么几个时间跨度1.

首先应该说的是:所有天上飞的理念都会有落地实现。所以我觉得还是从数据存储处理的发展简史来引入NoSQL更为贴切,也能让自己有更细致的认识。
数据存储与处理技术的发展有这么几个时间跨度

1.单机MySQL的美好时代
2.Memcached(缓存)+MySQL+垂直分离
3.MySQL主从读写分离
4.分库分表+水平拆分+mysql集群
5.MySQL的扩展性瓶颈
6.今天的架构
7.为什么使用NoSQL

1.单机MySQL的美好时代


在90年代,一个网站的访问量并不大,用单个数据库完全可以轻松应对,那个时候,更多的都是静态网页,动态交互型的网站并不多。
网站的架构设计如下图所示:

img_f23e8942d397a269ff65a6178e36a868.png
早期动态网站架构图.png

大学期间我们大都用的是这个简单原始的架构来做网站,在数据量不是很大的情况下,是完全应付的来的。

那么上述架构能带来什么问题呢?

1.数据量太大,一个机器放不下时。
MySQL5.7单表500w数量已经很棒,但是300w时就应该优化了。
2.数据的索引(B+Tree)一个机器的内存放不下时。
索引是加速数据库访问效率的一种机制,但是索引是存储在内存当中的,如果数据量太大,那么意味着内存中存储的索引也会很大,在每一次加入数据的时候,数据库都需要维持索引,这样假设索引跟数据量同处一个机器,而不做优化,那么数据访问将非常之缓慢。
3.访问量(读写混合)一个实例并不能承受。

如果满足不了上述当中的1-3个,请演化。

2.Memcached(缓存)+MySQL+垂直分离


2.1 Memcached(缓存)

随着访问量的上升,几乎大部分使用MySQL架构的网站在数据库上都出现了性能问题,web程序不再仅仅关注在功能上,同时也开始追求性能,程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引,开始比较流行的是通过文件缓存来缓解数据库的压力,但是当访问量继续增大的时候,多台web服务器通过文件缓存不能共享,大量的小文件缓存也带来了比较高的IO压力,在这个时候,Memcached(缓存)自然成为一个非常时尚的技术产品。
缓存的实质是替数据库挡了一层。
频繁被访问的数据可以被放置于缓存当中,以供频繁访问。

架构图如下所示:

img_61c17d92375aa5b5845c6bbaf94ff0b6.png
Memcached(缓存)+MySQL+垂直分离.png

2.2 垂直拆分

什么是垂直拆分?
举个例子,淘宝的数据库服务器是要进行定性 的,比如说有四台数据库服务器,两台进行买家数据的存储,两台进行卖家数据的存储,将原本一台数据库实例需要做的事情,均摊给四台服务器。DB数据操作能力会有很大提升。

3. MySQL主从读写分离

1 什么是主从复制?
多搞几个数据库来存储数据,假设有三台数据库,一主二仆,即一台主服务器,两台从服务器,当新增数据至主数据库服务器的时候,那么同时复制此数据进入到从数据库服务器当中。数据复制是为了容灾备份,缓存备份,保证数据的完整性。
2 什么是读写分离?
增删改是写,查为读。
读就去职能为被查询的数据库服务器去读。
写就去职能为写数据的数据库服务器去写。
分工明确,结合缓存能实现性能的一大提升

架构图如下所示:

img_26d37e131215ef8e188b0fe285d38b93.png
主从复制与读写分离.png

其中的M是master 即主DB Server ,S为slaver即从属DB Server,各有分工。
写操作在 M,读操作在S。S的数据是从master方复制的。

4.分库分表+水平拆分+MySQL集群


承接主从复制,读写分离,以及Memcached的使用,这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MYISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MYISAM,由于数据量的指数级增长,只能继续对架构进行演变。
与此同时,开始流行使用分库分表来缓解写压力和数据增长的扩展问题。这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL cluster集群,单性能也不能很好的满足互联网的要求,知识在高可靠性上提供了非常大的保证。

1 基本思想之什么是分库分表?
从字面上简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
2 基本思想之为什么要分库分表?
数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
3 分库分表的实施策略。
分库分表有垂直切分和水平切分两种。
3.1 何谓垂直切分:
即将表按照功能模块、关系密切程度划分出来,部署到不同的库上。例如,我们会建立定义数据库workDB、商品数据库payDB、用户数据库userDB、日志数据库logDB等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。
3.2 何谓水平切分:
当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。例如,我们的userDB中的用户数据表中,每一个表的数据量都很大,就可以把userDB切分为结构相同的多个userDB:part0DB、part1DB等,再将userDB上的用户数据表userTable,切分为很多userTable:userTable0、userTable1等,然后将这些表按照一定的规则存储到多个userDB上。

5.MySQL的扩展性瓶颈


视频、图片大数据量的数据时不能存储到数据库当中的,假设一个视频1.8G,MySQL中肯定是不能进行存储的。
下图是淘宝分享出来的一种架构方式:


img_55870a2036ec71ebcd663bae18d1d0f6.png

img_15a45c9cff74020337e19d4655e553ea.png
淘宝分享-高性能网站架构.png.png

6.今天的架构


答案就是NoSQL。
NoSQL(NoSQL = Not Only SQL),意为"不仅仅是SQL"。泛指非关系型数据库。随着互联网2.0网站的兴起,传统的关系型数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合以及多中数据带来的挑战,尤其是大数据应用难题,包括大规模数据的存储。
例如:谷歌活着Facebook每天为他们的用户收集万亿比特的数据。这些数据的存储不需要固定的模式,无需多余的操作就可以横向扩展。

下一节继续!

博客搬家:大坤的个人博客
欢迎评论哦~

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
20天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
104 0
|
20天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
20天前
|
关系型数据库 MySQL 数据库
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
轻松入门MySQL:精准查询,巧用WHERE与HAVING,数据库查询如虎添翼(7)
|
26天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL是关系型DB,依赖预定义的表格结构,适合结构化数据和复杂查询,但扩展性有限。NoSQL提供灵活的非结构化数据存储(如JSON),无统一查询语言,但能横向扩展,适用于大规模、高并发场景。选择取决于应用需求和扩展策略。
114 1
|
17天前
|
存储 关系型数据库 MySQL
MySQL基础入门:数据库操作全攻略
MySQL基础入门:数据库操作全攻略
47 0
|
20天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
4天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
37 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
1月前
|
SQL 存储 关系型数据库
【C/C++ 应用开发 数据库】入门 Qt数据库编程:从基本操作到高级技巧
【C/C++ 应用开发 数据库】入门 Qt数据库编程:从基本操作到高级技巧
74 0
|
1月前
|
存储 NoSQL 关系型数据库
四种类型的nosql数据库
随着互联网的发展,传统关系型数据库已经不能满足大数据时代的需求。NoSQL数据库应运而生,它们具有高可扩展性、高性能和高可用性等优点。本文将介绍四种主要类型的NoSQL数据库,分别是键值存储数据库、文档存储数据库、列存储数据库和图形数据库。这些数据库在不同的场景下有着不同的应用,可以满足不同的需求。
|
1月前
|
存储 缓存 NoSQL

热门文章

最新文章