
数据库
文章平均质量分 72
TravelSir
被嘲笑的梦想,才更有被实现的价值。
展开
-
Redis持久化
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。要有下面五个过程:客户端向服务端发送写操作(数据在客户端的内存中)。数据库服务端接收到写请求的数据(数据在服务端的内存中)。服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。Redis 提供了两种持久化方式:RDB(默认) 和AOFRDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘原创 2022-06-13 10:21:42 · 348 阅读 · 1 评论 -
联合索引最左原则失效了怎么办
Mysql5.6后的新特性在使用联合索引时,最左索引使用范围查找时会使后续索引无序失效例如 现在我们有一个users表,表里有一个(age,height)的联合索引 假设我们要执行这条sql 假设现在数据库里的辅助索引表这样存储 如果是在Mysql5.6之前,会把age=10和age=11的6条数据全部拿出来后再遍历判断height是否等于10,这样height的索引其实就失效了,因为对于age组合后的数据来说,height已经是无序的了所以在Mysql5.6之后加入了一个索引下推的新特性。它不再把满足a原创 2022-06-10 10:12:17 · 637 阅读 · 0 评论 -
MySQL软件架构
Mysql主要由Mysql Server 加 存储引擎 构成 Mysql Server 主要是由连接器,缓存,分析器,优化器和执行器组成连接器的主要功能是用于管理处理客户端连接请求,连接器接受4种请求方式记录查询缓存在内存中,有相同语句则直接返回结果。Mysql8.0之后已取消主要是根据关键字将sql语句解析成语法树,语法不合法则会报错MySQL 优化器使用基于成本的优化方式(Cost-based Optimization),以 SQL 语句作为输入,利用内置的成本模型和数据字典信息以及存储引擎的统计信息决原创 2022-06-09 10:18:01 · 489 阅读 · 0 评论 -
MySQL的三大日志
bin log日志是Mysql server层的逻辑日志,它完整的记录了每次数据更新的操作。所以,bin log可用于从库进行数据复制更新,也可用于数据库的数据闪回binlog 日志有三种格式,分别为 STATMENT 、 ROW 和 MIXED 。STATMENT : 基于 SQL 语句的复制( statement-based replication, SBR ),每一条会修改数据的sql语句会记录到 binlog 中 。ROW : 基于行的复制( row-based replication, RBR )原创 2022-06-09 10:16:54 · 467 阅读 · 0 评论 -
MySQL数据更新
bin log 和 redo log都是写入内存,可通过配置规定多久将内存中的日志落入磁盘中redo log 可以通过修改innodb_flush_log_at_trx_commit参数配置讲redo log buffer写入磁盘中的时机有时候Mysql会卡几秒不处理事务,而且磁盘IO很高,这个时候不是Mysql在进行垃圾回收,而是Mysql在刷脏页因为mysql的数据更新首先都是在内存中,所以就会导致内存中的数据与磁盘上的数据不一致,而内存中的数据页就是脏页。脏页的存在可以加快查询,且保证事务的数据隔离性原创 2022-06-09 10:16:01 · 1118 阅读 · 0 评论 -
数据库有哪些分类
所有资源都共享,启多个服务器节点都使用同一套资源,跟单节点差别不大,一般数据库都不采用内存和磁盘共享,但有多个独立cpu,这种一般用在超级计算机上,提升计算性能只共享磁盘,每个节点有单独的cpu和内存。像阿里的PolarDB就采用的这个架构。网吧也是用的这个架构什么都不共享 像我们平时的mysql集群,主从复制,还有分库分表都是分开独立的,相互之前通过网络请求联系...原创 2022-06-09 10:15:13 · 298 阅读 · 0 评论 -
InnoDB的数据存储方式
在理解行数据结构时,我们首先要知道两个概念:变长列和行溢出数据变长列值得是一个字段对应的不同行数据在存储中占用的大小时不固定的 当行数据中某个字段长度过长,会影响到一页数据所存储的行数据条数,从而影响到B+树的性能。所以InnoDB会将一条行数据中过长字段的数据单独存放到BLOB的页中,而在B+树叶子节点中存储指针。这样的机制的优点是保证了单页行数据条数更多,降低磁盘IO,提升查询效率缺点是在需要查询该长字段的数据时,需要去额外磁盘IO一次查询数据InnoDB的行记录格式主要有四种MySQL5.0之前的默认原创 2022-06-09 10:14:09 · 1342 阅读 · 0 评论 -
docker下mongodb开启权限认证后无法创建用户问题
docker启动mongo容器时默认是未开启权限认证的,所以为了防止被脱裤,启动的时候需要在最后加上–auth参数来使mongo开启权限认证 创建用户 由于刚创建的mongo容器是没有任何用户的,所以需要手动创建一个admin用户首先使用mongo admin进入容器里的mongo命令行 然后在mongo命令行创建一个用于创建用户的admin用户 这里的role权限主要有BUT创建失败 因为开启了权限认证,所以创建用户需要权限,所以我们需要先不开启权限认证,需要先创建好了admin账号后再开启。把之前的容器原创 2022-06-09 10:12:00 · 4267 阅读 · 1 评论 -
mysql交换两列数据
mysql交换两列数据 在做数据迁移的时候,将老表的两个表示大图和小图字段的直导入新表时导反了,所以在新表需要交换两列的值 本来想的是直接用set x=y, y=x 结果发现mysql进行update进行set的时候,x=y时就已经将x的值写进去了,所以后面的y取到的x是已经改变过的了。 解决办法有: 1.新增一个字段tem, 临时存储x的值,用完即删 update xxx set tem=x, x=y, y=tem 这种方法要增删字段,十分不优雅 2. 连表操作, 将本表临时备份出来这样就能保留x原来的原创 2021-06-23 18:28:27 · 1633 阅读 · 0 评论 -
memcached
memcached是什么? memcached是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于键值对的存储。其守护进程是用C写的,但客户端可以用任何语言来编写。 memcached和memcache的关系 简单来说,可以把memcached看成是memc...原创 2018-07-19 22:19:37 · 373 阅读 · 0 评论 -
数据库的四大特性和四种隔离等级
数据库事务特性(ACID) Atomicity(原子性): 原子性指的是一个事务中的操作,要么全部成功,要么全部失败,如果失败,就回滚到事务开始前的状态 Consistency(一致性): 一致性是指事务执行前后都必须保证数据库的一致性状态 Isolation(隔离性): 在并发事务的情况下,在一个事务的操作不应影响另一个事务 Durability(持久性): 持久性指的是一旦事务被提交,那数据库中的数据改变就是永久的 数据库事务的四种隔离等级 Read Uncommitted(读未提交) 指一个事务可原创 2022-05-25 09:32:32 · 193 阅读 · 0 评论