分类目录归档:云计算

MongoDB简介与安装


MongoDB

引言

在早期的程序开发过程中,单体+MySQL足以应对业务需求,可随着业务不断发展,系统架构演变成分布式,而数据存储的需求亦是多样化,单纯依赖于MySQL或其他某一款关系型数据库,再也难以支撑系统的存储需求,于是,现如今一个复杂系统中,可能会牵扯到MySQL、Redis、ES、MongoDB、FastDFS、CDH……多种数据存储产品,根据不同的业务特性、响应要求,会将数据存储在不同组件中以满足系统需要。

MongoDB是数据库家族中的一员,是一款专为扩展性、高性能和高可用而设计的数据库,它可以从单节点部署扩展到大型、复杂的多数据中心架构,也能提供高性能的数据读写操作;而...

Read more

MySQL存储引擎


MySQL存储引擎

1.存储引擎

存储引擎就是存储数据、建立索引、更新、查询数据等技术的实现方式。

1.1 MySQL 体系结构

MySQL体系结构

image-20240829092301203

连接层

主要完成一些类似于连接处理、授权认证、及相关的安全方案。

服务层

主要完成大多数的核心服务功能,如 SQL 接口,并完成缓存的查询,SQL 的分析和优化,是否使用索引,部分内置函数的执行。

引擎层

存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。数据库中的索引是在存储引擎层实现的

存储层

主要是将数据 (如...

Read more

MySQL事务


MySQL事务

事务简介

事务是一组操作集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

图片

图片

图片

图片

注意:

MySQL的事务默认自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐式提交事务。

事务操作

数据准备

drop table if exists account;
create table account(
    id int primary key AUTO_INCREMENT comment 'ID',
    name varchar(10) comment &...

Read more

MySQL高可用架构


MySQL高可用架构

图片

前言

对于 MySQL 数据库作为各个业务系统的存储介质,在系统中承担着非常重要的职责,如果数据库崩了,那么对于读和写数据库的操作都会受到影响。如果不能迅速恢复,对业务的影响是非常大的。这次我们来学习MySQL 双主 + Keepalived 的高可用落地和踩坑之路。

一、方案选择

对于 MySQL 的高可用,主要分为两步,配置 MySQL 主主模式和 keepalived 软件。拓扑图如下所示:

图片

MySQL 数据库的主主模式

两个数据库分别部署在两台服务器上,相互同步数据,但是只有一个提供给外部访问,当一个宕机后,另外一个可以继续提供服务,在没有 keepal...

Read more

MySQL的读写分离


MySQL的读写分离

MySQL读写分离是一种数据库架构优化方案,核心思想是将数据库的写操作(INSERT/UPDATE/DELETE)读操作(SELECT) 分配到不同的数据库实例上处理,以提高系统性能和稳定性。

一、为什么需要读写分离?

在多数业务场景中,读操作的频率远高于写操作(例如电商商品浏览、新闻查看等)。如果读写操作都依赖单一数据库,会导致:

  • 写操作(如订单提交)占用数据库资源,影响读操作响应速度;
  • 单库负载过高,难以应对高并发请求;
  • 单点故障风险高,一旦数据库宕机,整个系统不可用。

读写分离通过"主库处理写,从库处理读"的方式,解决上述问题:

  • 分担主库压力,提...

Read more

MySQL六十六问


MySQL六十六问

1.什么是内连接、外连接、交叉连接、笛卡尔积呢?

  • 内连接(inner join):取得两张表中满足存在连接匹配关系的记录。
  • 外连接(outer join):不只取得两张表中满足存在连接匹配关系的记录,还包括某张表(或两张表)中不满足匹配关系的记录。
  • 交叉连接(cross join):显示两张表所有记录一一对应,没有匹配关系进行筛选,它是笛卡尔积在SQL中的实现,如果A表有m行,B表有n行,那么A和B交叉连接的结果就有m*n行。
  • 笛卡尔积:是数学中的一个概念,例如集合A={a,b},集合B={1,2,3},那么A✖️B={<a,o>,<a,1>...

Read more

什么是分库分表?


1.什么是分库分表?

简单的说就是,通过某种特定的条件,将我们存放在共一个数据库中的数据分散存放到多个数据库(主机)上,以达到分散单台设备负载的效果。

分库:就是一个数据库分成多个数据库,部署到不同机器。

图片

分表:就是一个数据库表分成多个表。

图片

2.为什么需要分库分表?

2.1为什么需要分库呢?

如果业务量剧增,数据库可能会出现性能瓶颈,这时候我们就需要考虑拆分数据库。从这几方面来看:

磁盘存储

  • 业务量剧增,MySQL单机磁盘容量会撑爆,拆成多个数据库,磁盘使用率大大降低。

并发连接支撑

  • 我们知道数据库连接是有限的。在高并发的场景下,大量请求访问数据库,MySQL单机是扛不住的...

Read more

MySQL 锁


一、锁的核心作用:解决并发冲突

锁是计算机协调多个进程或线程并发访问某一资源的机制。

在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

MySQL 的锁机制是保障数据一致性和并发性能的核心工具。它通过不同粒度、不同模式的锁,协调多个事务对数据的访问,避免脏读、幻读、丢失更新等问题。

数据库是多用户共享的资源,当多个事务(用户操作)同时访问同一数据时,可能引发:

    ...

Read more

Ubuntu 安装 NFS


Ubuntu 安装 NFS 共享目录详细步骤

NFS (Network File System) 是一种允许不同主机之间通过网络共享文件系统的协议。以下是详细的在 Ubuntu 上安装和配置 NFS 共享目录的方法,并附带示例。

1. 安装 NFS 服务

首先,在你的 Ubuntu 服务器上安装 NFS 服务器软件包。

sudo apt update
sudo apt install -y nfs-kernel-server

2. 配置 NFS 服务

创建一个目录作为共享目录。例如,我们使用 /mnt/nfs_share 作为共享目录。

sudo mkdir -p /mnt/nfs_...

Read more

使用Nginx+uWSGI部署Django项目


使用Nginx+uWSGI部署Django项目

Django是一个开源的Web应用框架,使用Python语言编写,主要用于搭建Web项目。本教程介绍如何在Linux服务器中使用Nginx+uWSGI部署Django项目。

步骤一:安装或核对Python版本

which python3 
ll /usr/bin/python*

回显信息类似如下所示。

user@localhost:~$ which python3 
/usr/bin/python3
user@localhost:~$ ll /usr/bin/python*
-rwxr-xr-x 1 root root 366203...

Read more