NoSql入门概述

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 首先应该说的是:所有天上飞的理念都会有落地实现。所以我觉得还是从数据存储处理的发展简史来引入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每天为他们的用户收集万亿比特的数据。这些数据的存储不需要固定的模式,无需多余的操作就可以横向扩展。

下一节继续!

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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
100 3
SpringBoot入门 - 添加内存数据库H2
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
58 4
SpringBoot入门(4) - 添加内存数据库H2
|
3月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
42 2
SpringBoot入门(4) - 添加内存数据库H2
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
75 13
|
2月前
|
存储 缓存 NoSQL
常见的 NoSQL 数据库有哪些?
常见的 NoSQL 数据库有哪些?
66 2
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
62 4
|
3月前
|
存储 人工智能 Java
Neo4j从入门到精通:打造高效知识图谱数据库 | AI应用开发
在大数据和人工智能时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文从入门到精通,详细介绍知识图谱及其存储工具Neo4j,涵盖知识图谱的介绍、Neo4j的特点、安装步骤、使用方法(创建、查询)及Cypher查询语言的详细讲解。通过本文,读者将全面了解如何利用Neo4j处理复杂关系数据。【10月更文挑战第14天】
242 6
|
3月前
|
存储 SQL JSON
介绍一下RDBMS和NoSQL数据库之间的区别
【10月更文挑战第21天】介绍一下RDBMS和NoSQL数据库之间的区别
158 2
|
3月前
|
存储 SQL NoSQL
数据库技术深度探索:从关系型到NoSQL的演变
【10月更文挑战第21天】数据库技术深度探索:从关系型到NoSQL的演变
97 1
|
3月前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。