
DataBase
文章平均质量分 76
Wang's Blog
Keep learning for the innovation era.
展开
-
Redis: 集群高可用之故障转移和集群迁移
若要检查源和目标是否数据统一,还可选择阿里配套工具RedisFullCheck。3.4 使用 RedisFullCheck 工具检查。下载官方编译好的工具包,直接解压后就能使用。故障转移,包括自动故障转移和手动故障转移。运行之后,就给一个反馈结果,如果是。1.2 原集群与目标集群结构不一致。1.1 原集群与目标集群结构一致。2 ) 手动故障转移。原创 2024-10-04 16:00:08 · 1903 阅读 · 0 评论 -
Redis: 集群高可用之MOVED转向和ASK转向解决方案
MOVED 转向相当于告诉你这个槽在哪,你要自己去获取, 解决办法是以集群的方式连入,或者说自己去维护槽对应节点信息, 在每次命令之前自己去做处理判断,让他向正确的节点发送请求。ASK 转向是槽迁移的过程中产生的一种错误,它会给你返回 ASK error。否则的话,先发送一个 ASKING,然后再去获取,就能正常拿到。解决办法,也是你的客户端以集群的方式接入,它会自己帮你去处理。1 ) 关于 MOVED 转向。2 )关于 ASK 转向。2 )Redis 规范。3.1 解决方案 1。3.2 解决方案 2。原创 2024-10-04 13:33:58 · 1172 阅读 · 0 评论 -
Redis: 集群高可用之节点与插槽管理
Redis Cluster 集群模式,它使用的是分片来存储数据的,数据都存在多个节点上。而且使用了哈希槽这样的机制,它内部维护了 16384 个插槽那就是说每一个节点其实都具体的分布了一些槽,如果我们添加一个节点的话,槽总数就就要扩增吗?当然不是,槽的总数还是 16384,如果我新加一个节点,这个节点如果说想要去处理客户端的命令就是它如果要能存数据的话,就得有槽,那我们其他的节点已经把槽都分完了,它的槽就得重新分片比如说我添加一个节点,我要从其他的节点上把一些槽取出来,分配给这个新节点。原创 2024-10-04 12:04:01 · 1088 阅读 · 1 评论 -
Redis: 集群测试和集群原理
Redis Cluster 没有单机那种 16个数据库 (0 - 15) 数据库的概念了,就是我们已经看不到数据库了。而是分成了 16384 个 slots (槽位) ,每个节点负责其中一部分槽位,槽位的信息存储于每个节点中。2 ) 16384 个 slots (槽位)那我们客户端这边是怎么来操作集群的呢?1 ) SET/GET 命令。2 ) 开启从节点只读模式。原创 2024-10-03 18:51:01 · 1671 阅读 · 0 评论 -
Redis: 集群环境搭建,集群状态检查,分析主从日志,查看集群信息
当从节点获得足够多的选票时,它就会成为新的主节点,并增加自己的configEpoch来更新槽位配置。在Redis集群中,纪元的更新通常是由节点间的通信和状态变更触发的。例如,当某个节点接收到来自其他节点的状态变更通知时,它会比较通知中的纪元与自己的纪元。如果通知中的纪元更大,则更新自己的纪元。确保集群状态的一致性:通过递增的纪元,集群中的节点可以确保它们对集群状态的认知是一致的。通过递增的纪元版本号,集群中的节点可以确保它们对集群状态的认知是一致的,并解决可能出现的配置冲突问题。4 )纪元的更新机制。原创 2024-10-03 16:24:34 · 1853 阅读 · 0 评论 -
Redis: 集群架构,优缺点和数据分区方式和算法
3 ) 单节点存储能力:通过集群Cluster解决。1 ) 并发量大了:通过主从复制解决。2 ) 主从稳定性:通过哨兵解决。2.2 一致性哈希分区。2.1 节点取余分区。原创 2024-10-03 12:32:22 · 1726 阅读 · 0 评论 -
Redis: Sentinel节点管理,故障迁移一致性以及TILT模式
raft 共识算法保证了故障迁移一致性在同一个周期里边,不会产生多个领头者也就不会产生多个故障迁移保证了故障迁移的一致性TILT模式是当前节点如果服务器压力大,或者说因为某些其他的原因导致获取不到系统时间没有办法有效的做出命令的回复的一个间隔判断,那么它就会进入TILT这个保护模式当这个保护模式正常运行 30 秒钟,它就会退出如果在这个保护模式期间仍然要做时间判断,还是没有办法去处理,它会延长TILT的这个模式。原创 2024-10-02 18:57:04 · 1136 阅读 · 0 评论 -
Redis: Sentinel工作原理和故障迁移流程
2 ) 有效回复 PING 命令的时间超过配置文件 down-after-milliseconds 选项所指定的值会被定为主观下线。6 )主节点被标为客观下线时, INFO 的命令触发由10s一次改为1s一次。2 )主观下线 (Subjectively Down, 简称 SDOWN)3 ) 客观下线 (Objectively Down, 简称 ODOWN)5 )投票选举主节点,从节点复制数据。4 ) 满足条件,客观下线。7 )冲裁失败后的状态恢复。3 )确认主观下线状态。1 )每秒 PING。原创 2024-10-02 17:43:52 · 1184 阅读 · 1 评论 -
Redis: Sentinel哨兵监控架构及环境搭建
在主从模式下,我们通过从节点只读模式提高了系统的并发能力并发不断增加,只需要扩展从节点即可,只要主从服务器之间,网络连接正常主服务器就会将写入自己的数据同步更新给从服务器,从而保证主从服务器的数据相同在这种架构下,它仍然是有一些缺点的,比如说它的可靠性保证不是很好,因为主从模式下,主节点故障了便无法提供写入的服务现在,我们通过哨兵来解决这个问题然后,主节点其实写的压力也是并没有被释放的包括主从之间的数据是相同的,它还有数据冗余一个问题后面集群也会解决这个问题。原创 2024-10-01 22:13:55 · 1731 阅读 · 0 评论 -
Redis: 主从复制故障分析及解决方案
复制风暴指的是多个从节点其中的同一时间向主节点发起了复制请求,主节点压力比较大。复制风暴又会根据 Redis 的架构模式分为两种情况。2.1 可以编写一个外部程序来监听从节点。4 ) 数据安全性相关的问题。1 )主从数据一致性的问题。5 )性能优化相关的问题。5.1 如何规避全量复制。5.2 如何规避复制风暴。2 )数据延迟的问题。2.2 修改配置文件。3.4 从节点写操作。原创 2024-10-01 10:48:53 · 1222 阅读 · 0 评论 -
Redis: 主从复制原理
- 环境搭建好之后,slave节点就发起了一个 sync 的请求,这个请求是一个 全量复制 * 其实增量无非就是在环境构建完成之后,每次你写入一个,我就复制一个写入一个复制一个- sync 的命- 通过下面的从节点的配置项可以开启主从之间的复制功能 ```conf slaveof 192.16.10.101 6379 ```- 这里的复制包含全量复制和增量复制2 )主节点的主从配置信息解析- 查看主从之间的信息,在主节点上 $ `info replication` 打印出来的细节原创 2024-09-30 23:59:25 · 1485 阅读 · 0 评论 -
Redis: 主从复制读写分离环境搭建
Redis 的单机模式实际上就是在一个服务器上装了一个单节点的Redis通过简单的配置和简单的命令启动起来就可以使用这种搭建环境,不保证高可用的情况下,完全没有问题如果说你的项目必须要具备高可用,而且 Redis 也要提供更高的性能这个单机的模式肯定是不行的, 需要对 Redis 的架构模式进行升级升级的过程:从单机变为主从,再变为哨兵最后搭建一个集群的环境1 )单机环境的优缺点优点部署简单下载,编译安装通过一些简单的命令启动就可以使用成本低。原创 2024-09-30 21:51:54 · 1359 阅读 · 0 评论 -
Redis: RDB与AOF的选择和容灾备份以及Redis数据持久化的优化方案
1 )同时开启在我们 Redis 的服务器上,把RDB和AOF同时打开, 这样可以通过RDB快速的恢复数据,因为它是一个紧凑的缩缩的二进制文件, 但是有时 Redis 的不小心故障了,丢失了十几分钟的数据可以通过AOF来做数据的恢复, 因为它所有写命令都会记录,Redis先加载AOF文件来恢复原始数据,因为AOF数据比RDB更完整,有时候我们会把一些错误的命令也记录在文件中, 会有一些潜在的bug,可以通过 redis-check-aof 来做修复,如果AOF文件实在是用不了,恢复不了,可以把RDB作为一原创 2024-09-29 20:11:36 · 1089 阅读 · 0 评论 -
Redis: 持久化之RDB和AOF
Redis 有一个高质量的课题:数据安全性与数据可靠性Redis 是一个内存型数据库,数据大部分都是存在内存里面当信息在内存中流通时,Redis 节点突然就故障挂掉当重新启动的时候,内存中的数据肯定是全部丢失了如果在这种情况下,Redis 提供了对应的持久化方案,它有两种持久化方案RDB和AOF可以把内存中的数据保存到磁盘,避免数据的流失关于RDB,我们需要了解到什么是持久化什么是快照RDB的工作原理,包括它的优点和缺点关于AOF,需要知道为什么需要有AOF。原创 2024-09-29 19:30:00 · 1182 阅读 · 0 评论 -
Redis: Sorted Set 底层算法的简单分析
我们先看下 Shorted Set 有序集合的内部数据结构所谓有序集合,比如有个容器,容器里边都已经排好序了,那无非就是快速的查找和插入不管你是查找还是插入,肯定要确定那个位置最简单的办法就是从最开头开始,挨个比较最终找到我们的位置这个实际上在数据集比较大的时候,它的性能就会比较低了它的时间复杂度是O(n),实际上可以提升至 O(logn)原创 2024-09-28 10:08:50 · 684 阅读 · 0 评论 -
Redis: 特点,优势,与其他产品的区别,版本演进,以及高并发原理
1 )选择Redis是因为其高性能因为 Redis 它数据存储的机制是存在内存中的,减少了传统关系数据库的磁盘IO它是单线程的保证了原子性,它还提供了事务,锁等相关的机制2 )Redis 环境安装配置linux 或 docker 环境3 )Redis 的并发下的模式演进并发在十万以下的时候,Redis提供了单机单节点模式官方测试的数据: 读取每秒11万次,写入每秒8万1, 所以性能是非常高的当并发上来了,10万 到 20万左右的时候,使用 Redis 提供到读写分离, 主从模式。原创 2024-09-24 21:48:00 · 1197 阅读 · 0 评论 -
Redis: 特色,业务场景举例,底层原理,持续进阶等问题梳理
Redis 是目前使用非常广泛的中间件,在于它功能强大,持续改进,经久不衰- 主要体现在以下几点 * 1 ) **高性能**: Redis 的底层是C语言编写的,它的定位是内存型数据库 * 而且 Redis 的作者对操作系统也非常的精通 * 它通讯方式采用了epoll 非阻塞 / IO多路复用的机制,提高了访问性 * 2 ) **线程安全**:Redis的操作都是单线程的, 保证了原子操作 * 注意,最新版本都到版本8了,这都多线程的,怎么还单线程呢原创 2024-09-24 17:59:37 · 1595 阅读 · 0 评论 -
MySQL中的开发基于Python的SQL工具类操作数据库简单示例
封装 db_context.py。基于 with 上下文管理。封装 db.py 工具类。xxx.py 调用示例。yyy.py 调用示例。原创 2024-01-06 08:17:14 · 734 阅读 · 1 评论 -
MySQL中的连接池
网站连接数据库,为庞大用户的每次请求创建一个连接是不合适的,关闭并重新连接的成本是很大的,处理方法:设置最大值, 最小值, 设置最多闲置连接,设置等待阻塞原创 2024-01-04 19:00:00 · 500 阅读 · 0 评论 -
MySQL中的表锁,行锁,排它锁,共享锁
在这张表中操作 insert 很多数据,这里就不做操作了。需要等到本人commit之后,才能结束锁,其他人才能继续。如果事务不结束,其他人操作,都会受到阻塞,进行不下去。和排它锁的区别是: 加锁之后,其他可读,不可写。mysql 按照类型分,可分为。原创 2024-01-03 23:25:26 · 829 阅读 · 0 评论 -
MySQL中的事务, 特性及应用
2 )事务的四大特性(ACID)3 ) SQL 应用示例。创建 users 表。原创 2024-01-03 22:19:08 · 622 阅读 · 0 评论 -
MySQL中的视图和触发器
2.2 使用视图简化以便后续可能得复用。2.1 比较麻烦的sql。2.2 删除前,删除后。2.1 插入前,插入后。2.3 更新前,更新后。原创 2024-01-03 20:39:11 · 547 阅读 · 0 评论 -
MySQL中的索引之分类,原理,作用,优缺点和执行计划
开发中,一般使用 innodb 引擎,支持事务,行级锁,外键等特点。综合以上,一般来说,性能在 RANGE 及其以上,性能算是 OK的。基于输出表格字段中的 type 来看,它是一个重要的性能指标。当然,这不是最终结果,只是初步的评价,和最终效率一定会有差异。在mysql5.5之后,所有默认引擎也是 innodb。比如 big 这张表,是基于 innodb 引擎的。我们后续用的 innodb ,都是聚簇索引。常见不同引擎的表,生成的文件也不一样。如果是联合索引,最遵循。2 )解析 type。原创 2023-12-30 12:22:16 · 985 阅读 · 0 评论 -
MySQL中常用的用户授权操作
让每个应用程序,单独开一个mysql的用户权限, 所有mysql用户存储在 mysql库的user表中原创 2023-12-30 11:38:18 · 869 阅读 · 0 评论 -
MySQL中常用的数据类型
项目开发中,一般都用 decimal, float, double 不常用。如果插入 小数不是 2位,会自动四舍五入。如果整数部分超出,则会报错(严格模式)严格模式和非严格模式的区别。从上面显示的时间是一样的。原创 2023-12-30 09:26:10 · 1217 阅读 · 0 评论 -
Docker笔记:Docker中简单配置Mysql/Redis/Mongodb容器
该用户是在 admin 身份验证数据库中创建的,并被赋予角色, 这是一个"超级用户"角色。1 )方案1:基于centos等linux操作系统。2 )方案2:直接用 mysql 镜像 (推荐)在客户端连接docker容器的mongo服务。结合起来使用来传递环境变量,配置账户密码。创建一个新用户并设置该用户的密码。原创 2023-12-11 22:26:59 · 1169 阅读 · 0 评论 -
Eggjs笔记:MongoDB索引、explain及Mongoose索引、内置CURD、扩展Mongoose Model的静态和实例方法
关于索引索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧创建索引 $ db.user.ensureIndex({"username":1})获取当前集合的索引 $ db.user.getIndexes()删除索引 $ db.user.dropIndex({"user......原创 2020-04-03 20:26:45 · 868 阅读 · 0 评论 -
Eggjs笔记:Mongoose预定义模式修饰符Getters与Setters自定义修饰符
Mongoose 预定义模式修饰符lowercase、uppercase 、trimmongoose 提供的预定义模式修饰符,可以对我们增加的数据进行一些格式化在定义Schema时进行处理var UserSchema=mongoose.Schema({ name:{ type:String, trim:true }, ag......原创 2020-04-03 16:41:59 · 358 阅读 · 0 评论 -
Eggjs笔记:Mongoose的CRUD,默认参数,模块化
关于MongooseMongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具Mongoose是 NodeJS 的驱动,不能作为其他语言的驱动是nodejs操作数据库的一个模块,更安全,更方便特点通过关系型数据库的思想来设计非关系型数据库基于 mongodb 驱动,简化操作Mongoose的安装以及使用官网:https://mongo......原创 2020-04-03 13:31:29 · 582 阅读 · 0 评论 -
Eggjs笔记:详解MongoDB聚合管道
MongoDB 聚合管道聚合管道: Aggregation Pipeline使用聚合管道可以对集合中的文档进行变换和组合用于表关联查询、数据的统计MongoDB 中使用 db.COLLECTION_NAME.aggregate([{<stage>},...]) 方法来构建和使用聚合管道在特定版本的MongoDB中才能使用 versions >= 3.2官网示例......原创 2020-04-03 09:05:43 · 854 阅读 · 0 评论 -
Eggjs笔记:egg-mongo-native对mongodb的操作
Egg.js 中使用第三方插件Egg.js 是基于 nodejs,所以可以使用 nodejs 的所有模块,使用方式就是在用到的地方引入对应模块,然后按照文档使用Egg.js 插件 egg-mongo-native 配置API文档: https://www.npmjs.com/package/egg-mongo-native使用方法:1 ) 安装$ npm i egg-mong......原创 2020-04-02 10:17:04 · 1071 阅读 · 0 评论 -
Socket.io教程: 基于Express和Mongodb的智能客服的简单设计与实现
智能客服的简单设计概述一个用户查询界面用户输入一个文本,比如订单号服务器通过模糊查询返回相应的订单信息如果是智能的话,还应该有AI相关服务,比如:各种场景和话术以及相关模型训练这里只来体现soket.io相关功能,不涉及AI相关实现后端设计数据库的封装和配置module/config.jsvar dbUrl = 'mongodb://localhost:27017/your-db-name'; // 这里填写连接你数据库的配置urlmodule.exports={ dbUr原创 2020-06-07 19:20:57 · 380 阅读 · 0 评论 -
Eggjs笔记:集成sequelize orm
关于Sequelize在一些较为复杂的应用中,我们可能会需要一个ORM框架来帮助我们管理数据层的代码。而在 Node.js 社区中,sequelize 是一个广泛使用的 ORM 框架,它支持 MySQL、SQLite 和 MSSQL 、PostgreSQL 等多个数据源。相关文档https://eggjs.org/zh-cn/tutorials/sequelize.htmlhttps://sequelize.org/Sequelize 操作 Mysql 数据库安装 egg-sequeliz原创 2020-06-06 11:49:06 · 641 阅读 · 0 评论 -
Eggjs笔记:Eggjs集成ElasticSearch及CRUD操作
相关文档https://www.elastic.co/guide/index.htmlhttps://www.elastic.co/guide/en/elasticsearch/clienthttps://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.htmlhttps://www.elastic.co/guide/en/elasticsearch/client/javascrip原创 2020-06-05 10:41:07 · 3217 阅读 · 3 评论 -
Eggjs笔记:ElasticSearch全文搜索引擎之安装, 配置中文分词插件, 以及CRUD操作
关于ESElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索。稳定,可靠,快速,安装使用方便。可以把ES当做是MongoDB来用,mongodb中也有全文搜索引擎,需要商业付费。官网:https://www.elastic.co/下载:https:原创 2020-06-04 22:52:53 · 1526 阅读 · 0 评论 -
Eggjs笔记:egg-mysql插件的集成, curd操作, 事务演示
egg-mysql的安装配置在 egg 项目中安装 egg-mysql $ npm i egg-mysql --save启用egg-mysql插件// 在 {app_root}/config/plugin.js 中exports.mysql = { enable: true, package: 'egg-mysql'};在配置文件中配置mysql数据库连接地址// ...原创 2020-04-05 05:39:53 · 1501 阅读 · 0 评论 -
Eggjs笔记:egg-mongoose插件的集成,crud操作, 多表关联查询
Egg 中的 modelapp/model/** 用于放置领域模型,可选,由领域类相关插件约定。Loader : Egg 在 Koa 的基础上进行增强最重要的就是基于一定的约定根据功能差异将代码放到不同的目录下管理,对整体团队的开发成本提升有着明显的效果,Loader 实现了这套约定,并抽象了很多底层API可以进一步扩展Loader还提供了caseStyle强制指定首字母大小写,比如加载...原创 2020-04-04 14:04:31 · 1373 阅读 · 0 评论 -
Eggjs笔记:详解Mongoose的聚合管道以及populate实现关联查询
基于mongodb的聚合管道此处忽略之前mongodb在eggjs中需要配置的步骤,前文已有说明,现在开始在controller中调用(应该封装到service中的,仅作为示例)const result = await this.app.mongo.aggregate('order', { pipeline: [ { $lookup: {...原创 2020-04-04 10:25:07 · 1811 阅读 · 0 评论 -
Eggjs笔记:Mongoose的数据校验
Mongoose 校验参数required: 表示这个数据必须传入max: 用于Number类型数据,最大值min: 用于Number类型数据,最小值enum: 枚举类型,元素需要字符类型, 要求数据必须满足枚举值,必须在枚举列表中,enum: [‘0’, ‘1’, ‘2’]match: 增加的数据必须符合 match(正则)的规则maxlength: 最大长度minlength:...原创 2020-04-04 08:04:25 · 567 阅读 · 0 评论 -
Eggjs笔记:mongodb的使用:权限配置,数据库角色
Mongodab4.x3.x 步骤安装环境变量配置path启动mongodb服务 mongod --dbpath 跟上存储路径开启服务再次启动一个客户端:mongo 即可!注:4.x 与3.x基本相同,但是无需指定存储路径,在安装的时候,要求配置(举例为windows环境下)4.x 步骤安装(可选可视化工具,windows环境下)环境变量Path配置直接用 mongo (.........原创 2020-04-02 08:10:07 · 1048 阅读 · 0 评论