NoSql入门概述

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 首先应该说的是:所有天上飞的理念都会有落地实现。所以我觉得还是从数据存储处理的发展简史来引入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
目录
相关文章
|
6天前
|
存储 数据处理 数据库
深入了解达梦数据库的增删查改操作:从入门到精通
深入了解达梦数据库的增删查改操作:从入门到精通
|
4天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
9 0
|
6天前
|
安全 Java 数据库连接
在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通
在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通
|
6天前
|
存储 Oracle 关系型数据库
达梦数据库入门语法:从基础到进阶的指南
达梦数据库入门语法:从基础到进阶的指南
|
15天前
|
SQL 关系型数据库 MySQL
【PHP开发专栏】PHP与数据库交互入门
【4月更文挑战第29天】本文介绍了PHP与数据库交互的基础,包括选择MySQL或PostgreSQL等关系型数据库,使用MySQLi或PDO扩展进行连接。示例展示了如何使用PHP连接数据库,如MySQLi的面向对象连接方式和PDO的多数据库支持。此外,还讲解了执行SQL查询(如SELECT、INSERT、UPDATE、DELETE)的操作,并强调了安全性与错误处理,如使用预处理语句防止SQL注入。通过学习,读者可掌握PHP操作数据库的基本技能。
|
16天前
|
存储 关系型数据库 MySQL
MySQL数据库实战:从入门到精通
本文介绍了MySQL的使用和优化,适合Web开发者阅读。首先,确保安装并配置好MySQL,熟悉SQL基础。接着,通过命令行客户端连接数据库,执行创建、查询、添加、修改和删除数据等操作。学习数据类型并创建表存储数据。最后,探讨了数据库优化,包括查询优化和索引使用,以提升性能。
26 2
|
19天前
|
存储 关系型数据库 MySQL
数据库期末考试基础——数据库系统概述
数据库期末考试基础——数据库系统概述
19 2
|
19天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
28 0
|
20天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
20天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互