十种数据库缓存相关的技术和机制
数据库的缓存 -- 通过将数据库中的数据或结果集保存在内存或其他快速访问的介质中,能够加快查询响应,减少对磁盘或远程服务器的访问,降低资源消耗。

根据缓存的位置、内容、粒度、更新方式等不同,数据库缓存技术有多种类型和策略。常用的以下10种:
1、Buffer Pool:
数据页缓存 -- 将频繁访问的数据页缓存在内存中的技术,可以提高查询性能和减少磁盘I/O。数据页是数据库中存储数据的最小单位,通常为4KB或8KB。当查询需要访问某个数据页时,数据库会先检查该数据页是否已经在Buffer Pool中,如果是,则直接从内存中读取,如果不是,则从磁盘中读取并放入Buffer Pool中。Buffer Pool的大小可以根据系统资源和数据库负载进行调整。

2、查询缓存( Query cache )
缓存经常重复的查询结果,避免重复执行SQL,可以节省CPU资源和网络带宽。当查询缓存开启时,数据库会将每个查询的SQL语句和结果集保存在内存中,当收到相同的SQL语句时,数据库会直接返回缓存的结果集,而不需要再次执行SQL。查询缓存的有效性依赖于表的更新频率,如果表经常被修改,则查询缓存会失效并需要重新生成。

3、预读 ( Pre-fetching )
根据数据库的访问模式,预先缓存可能使用的数据,是一种提高查询性能和预防磁盘I/O瓶颈的技术。预读有两种类型:顺序预读和随机预读。顺序预读是指当数据库检测到连续访问相邻数据页时,会提前从磁盘中读取后续的数据页并放入Buffer Pool中,以满足后续的查询需求。随机预读是指当数据库检测到频繁访问某些索引页时,会提前从磁盘中读取相关的数据页并放入Buffer Pool中,以加速索引查找。

4、异步I/O ( Asynchronous I/O )
允许多个查询并发访问缓存,是提高数据库吞吐量和响应时间的技术。当数据库需要从磁盘中读取或写入数据时,不阻塞当前的查询进程,而是将I/O请求交给系统处理,并继续执行其他查询或操作。这样避免查询等待I/O完成而浪费CPU资源,并可以充分利用系统的I/O调度算法和硬件特性。

5、连接池 ( Connection Pool )
复用已存在连接的技术。避免连接反复创建、销毁,减少连接开销,提高连接效率。由数据库服务器维护一组已经建立好的连接,并将其保存在内存中。当客户端请示连接数据库时,数据库服务器从连接池中分配一个空闲的连接给客户端,并在客户端断开连接后将连接回收到连接池中。避免了每次都重新建立和销毁连接所带来的时间和资源消耗,并且可以控制并发连接数量。

6、照合缓存 ( Metadata Cache )
为了加速表扫描和索引查找,缓存经常访问表的元数据信息的一种缓存技术。照合缓存是将每个表的结构、列、索引、约束等信息保存在内存中,并在收到对该表的查询时直接从内存中获取这些信息,而不需要再次从系统表中读取。这样可以减少对系统表的访问次数,快速确定查询计划。

7、Write Ahead Log
事务提交前先写入日志,可以保证事务的持久性和原子性。Write Ahead Log是当数据库执行一个事务时,并不是立即将事务对数据的修改写入磁盘,而是先将事务的操作记录写入日志文件中,在事务提交时将日志文件刷新到磁盘。这样可以避免频繁的数据写入操作,并且可以在数据库崩溃时根据日志文件恢复数据的一致性。

8、事务日志( Transaction Log )
记录事务执行情况,用于数据库恢复。事务日志是数据库服务器将每个事务的开始、结束、提交、回滚等信息记录在日志文件中,并在数据库崩溃时根据这些信息恢复事务的状态。可以保证事务的完整性和隔离性,避免数据丢失或脏读。

9、复制日志( Replication Log )
主从复制时的数据同步日志。复制日志是当数据库服务器作为主服务器时,将自己对数据的修改记录在日志文件中,并将日志文件发送给从服务器,从服务器则根据日志文件更新自己的数据。这样可以实现主从之间的数据一致性,并且可以在主服务器故障时切换到从服务器继续提供服务。

10、物化视图 ( Materialized View )
将查询结果缓存,是一种避免重复计算的技术。物化视图是数据库服务器将某个复杂查询的结果集保存在一个表中,并定期更新这个表。当收到相同或类似的查询时,数据库服务器会直接从物化视图中返回结果,而不需执行复杂查询。

相关内容拓展:(技术前沿)
开发语言作为软件搭建的底层,长久以来一直使用英文编程,Java、C 等语言对于专业程序员来说并不难,然而许多非 IT 专业的人,希望搭建出适合自己使用的软件,却被晦涩难懂的英文编程阻拦在外。
所幸的是,自 2000 年以来,低代码领域虽然在夹缝中艰难生存,但是经历 20 年风雨,如今却已柳木成荫,相关领域企业超过百家,近年如火如荼的“JNPF 平台”更是低代码界的一匹黑马。
JNPF 平台由具备 10 多年系统开发经验和企业项目交付经验的技术团队倾力打造而成的企业级低代码平台。支持多国语言切换搭建界面,业务流程只需要“拖拉拽”方式、少量或完全不需要编写代码即可搭建,操作起来就像搭积木一样简单,会玩电脑就可以开发软件。
核心功能:表单引擎、可视化引擎、BI引擎、流程引擎、权限引擎、门户引擎、大屏引擎、接口中心、物联平台
如果那你未曾尝试过这个领域,你或许可以试试看!官网:https://www.jnpfsoft.com/?csdn
相关文章:
十种数据库缓存相关的技术和机制
数据库的缓存 -- 通过将数据库中的数据或结果集保存在内存或其他快速访问的介质中,能够加快查询响应,减少对磁盘或远程服务器的访问,降低资源消耗。 根据缓存的位置、内容、粒度、更新方式等不同,数据库缓存技术有多种类型和策略。…...
【C++】封装unordered_map和unordered_set(用哈希桶实现)
前言: 前面我们学习了unordered_map和unordered_set容器,比较了他们和map、set的查找效率,我们发现他们的效率比map、set高,进而我们研究他们的底层是由哈希实现。哈希是一种直接映射的方式,所以查找的效率很快…...
面试问题回忆
(1)查看端口 lsof -i:8080 / netstat lsof -i:8080:查看8080端口占用 lsof abc.txt:显示开启文件abc.txt的进程 lsof -c abc:显示abc进程现在打开的文件 lsof -c -p 1234:列出进程号为1234的进程所打开…...
更多场景、更多选择,Milvus 新消息队列 NATS 了解一下
在 Milvus 的云原生架构中,消息队列(Log Broker)可谓任重道远,它不仅要具备流式数据持久性、支持 TT 同步、事件通知等能力,还要确保工作节点从系统崩溃中恢复时增量数据的完整性。 在 Milvus 的架构中,一切…...
如何通过python实现一个web自动化测试框架?
要实现一个web自动化测试框架,可以使用Python中的Selenium库,它是最流行的Web应用程序测试框架之一。以下是一个基本的PythonSelenium测试框架的示例: 1、安装Selenium 在终端中输入以下命令,使用 pip 安装 Selenium:…...
Linux —— 信号阻塞
目录 一,信号内核表示 sigset_t sigprocmask sigpending 二,捕捉信号 sigaction 三,可重入函数 四,volatile 五,SIGCHLD 信号常见概念 实际执行信号的处理动作,称为信号递达Delivery;信…...
【【萌新编写riscV之计算机体系结构之CPU 总二】】
萌新编写riscV之计算机体系结构之CPU 总二(我水平太差总结不到位) 在学习完软件是如何使用之后 我们接下来要面对的问题是 整个程序是如何运转的这一基本逻辑 中央处理器(central processing unit,CPU)的任务就是负责提取程序指令࿰…...
error:03000086:digital envelope routines::initialization error
项目背景 前端vue项目启动突然报错error:03000086:digital envelope routines::initialization error 我用的开发工具是vscode,node版本是v18.17.0 前端项目版本如下↓ 具体报错如下↓ 报错原因 node版本过高 解决方法 1输入命令 $env:NODE_OPTIONS"--op…...
暴涨130万粉仅用3个月,一招转型成B站热门UP主
- 导语 起号难、找不到内容方向、没流量、没粉丝等等运营困境环绕在创作者之间,近期,有黑马UP主短时间内就在B站涨粉百万,飞升成为热门UP主,以下,飞瓜数据(B站版)剖析黑马UP主运营技巧…...
【Linus】vim的使用:命令模式、底行模式、插入模式、视图模式、替换模式的常用操作介绍
目录 注意:以下操作前提是要确保你输入法是英文模式 一、进入和退出各个模式的方法 1.命令模式 2.底行模式 3.插入模式 4.视图模式 5.替换模式 二、在命令模式中一些常用的操作 1.移动光标 2.删除文字 3.复制 4.替换 5.撤销上一次操作 6.更改 7.跳至指…...
leetcode第362场周赛补题
8029. 与车相交的点 - 力扣(LeetCode) 思路:差分数组 class Solution { public:int numberOfPoints(vector<vector<int>>& nums) {int diff[102] {}; for(auto p : nums)//差分{diff[p[0]] ;diff[p[1] 1] -- ;}int res …...
SpringMvc 之crud增删改查应用
目录 1.创建项目 2.配置文件 2.1pom.xml文件 2.2 web.xml文件 2.3 spring-context.xml 2.4 spring-mvc.xml 2.5 spring-MyBatis.xml 2.6 jdbc.properties 数据库 2.7 generatorConfig.xml 2.8 日志文件log4j2 3.后台代码 3.1 pageBean.java 3.2切面类 3.3 biz层…...
【业务功能109】微服务-springcloud-springboot-Skywalking-链路追踪-监控
Skywalking skywalking是一个apm系统,包含监控,追踪,并拥有故障诊断能力的 分布式系统 一、Skywalking介绍 1.什么是SkyWalking Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin /Pinpoint …...
《向量数据库指南》——AI原生向量数据库Milvus Cloud 2.3架构升级
架构升级 GPU 支持 早在 Milvus 1.x 版本,我们就曾经支持过 GPU,但在 2.x 版本中由于切换成了分布式架构,同时出于对于成本方面的考虑,暂时未加入 GPU 支持。在 Milvus 2.0 发布后的一年多时间里,Milvus 社区对 GPU 的呼声越来越高,再加上 NVIDIA 工程师的大力配合——为…...
Flutter中实现交互式Webview的方法
前言: Flutter是一款强大的跨平台移动应用开发框架,而Webview则是在应用中展示Web内容的重要组件。本文将介绍如何在Flutter应用中实现交互式的Webview,以便为用户提供更加丰富的内容和功能。 1. 引入webview_flutter插件 要在Flutter应用中…...
【Java Web】用Redis优化登陆模块
使用Redis存储验证码 验证码需要频繁访问和封信,对性能要求高;验证码不需要永久保存,通常在很短时间内失效;分布式部署,存在Session共享问题; 使用Redis存储登陆凭证 处理每次请求时,都要查询用…...
华为云云耀云服务器L实例评测|docker私有仓库部署手册
【软件安装版本】【集群安装(是)(否)】 版本号 文档编写 文档审核 创建日期 修改日期 1.0 jzg jzg 2023.9.13 一. 部署规划与架构 1. 规划:(集群:网络规划&…...
JAVA-3DES对称加解密工具(不依赖第三方库)
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class EncryptUtil {// 密钥public static final String ENCR…...
基于Matlab卡尔曼滤波的IMU和GPS组合导航数据融合(附上源码+数据)
本文介绍了如何使用Matlab实现惯性测量单元(IMU)和全球定位系统(GPS)组合导航数据融合的卡尔曼滤波算法。通过将IMU和GPS的测量数据进行融合,可以提高导航系统的精度和鲁棒性。我们将详细介绍卡尔曼滤波的原理和实现步…...
net自动排课系统完整源码(适合智慧校园)
目录 1 net自动排课系统完整源码(适合智慧校园) 1.1 后台管理admin 1.1.1 菜单 1.1.2 教学计划 net自动排课系统完整源码(适合智慧校园) 后台管理admin<%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
