数据库服务器架构

ORM

ORM(Object Relational Mapping):对象与关系数据之间的映射

映射关系表:

类(class)—— 数据库的表(table)

对象(object)——记录(record 行数据)

对象的属性(attribute)—— 字段(field)

主流技术:Hibernate ; MyBatis;Entity FrameWork

数据库读写分离化

主从数据库结构

特点:一般一主多从,也可以多主多从;主库做写的操作,从库做读的操作

主从复制操作:

  1. 主库更新数据完成前,将操作写binlog日志文件
  2. 从库打开I/O线程与主库连接,做binlog dump process(从日志中读取主库的操作),并将事件写入中继日志
  3. 从库执行中继日志事件,保持与主库一致

缓存技术

用缓存缓解读库的压力,将数据暂存在缓存中,减少对硬盘的直接操作

缓存与数据库的协作

数据读取:

  1. 根据key从缓存读取
  2. 若缓存中没有,则根据key在数据库中查找
  3. 读取到“值”之后,更新缓存

数据写入:

  1. 根据key值写入数据库
  2. 根据key更新缓存 

常见的缓存技术

MemCache

简单的key/value结构,不支持数据容灾,不支持事务管理,结构简单,功能较少

Redis

Redis集群切片:

  • 客户端切片,在客户端通过key的hash值对应到不同的redis服务器
  • 中间件实现切片:在应用软件和redis中间实现服务器到后台redis节点的切片
  • 客户端服务器协作切片:两者结合,服务器为客户端提供slot(插槽)(一个服务器可能对应多个slot),再由客户端的hash算法选择相应的插槽。 

数据分片方案:

  • 范围分片:根据某个关键字的取值范围将数据分片
  • Hash分片:根据某个关键字的Hash值将数据分片,能够较为均匀地分片
  • 一致性Hash分片: 将服务器的编号也进行Hash计算,再根据某个关键字的Hash值与服务器的Hash值进行比较,将数据存在Hash值距离较近的服务器上。(缓解了新增服务器后,数据迁移的问题)

分布式存储方案:

  • 主从模式:一主多从(主负责写,从负责读),主服务器故障时手动切换 
  • 哨兵模式:在主从模式的基础上增加哨兵的监督,哨兵负责监督服务器运行状态,如果主服务器故障,哨兵可以自行选择切换主服务器。
  • 集群模式:分节点对等集群,根据Web服务器的slot插槽来分配数据库的节点。

Redis数据类型:

  • String:最大512MB,用于缓存,计数。共享Session
  • Hash (字典):一个Key对应一组数据,用于存储、读取、修改用户属性
  • List:双向链表,增删快,查询慢,用于消息队列,文章列表
  • Set(集合):键值对无序,唯一,增删查复杂度为O(1),用于独立IP,标签
  • Sorted Set(有序集合):键值对有序,唯一,自带按权重排序的效果,用于排行榜

数据淘汰机制:

  • 不淘汰:禁止驱逐数据,填满了就报警,是系统默认的淘汰策略,常用机制:noeviction
  • 根据过期时间淘汰:常用机制:volatile - random(随机移除某个过期的key),volatile - lru(优先移除最近未使用的过期的key),volatile-ttl(ttl值(ttl值标识过期时间,值最小表示过期最久)最小的key优先移除) 
  • 全键空间 :常用机制:allkey - random(随机移除某个key) ,allkey -lru(优先移除最近未使用的key)

Redis的持久化(数据恢复):

  • RDB:传统数据库中快照的思想。指定时间间隔将数据进行备份
  • AOF:传统数据库中的日志思想,把每条改变数据集的命令追加到AOF文件的末尾,数据丢失时,可以根据AOF文件中的命令重建数据库

 常见问题:

  • 缓存雪崩:短时间内大量缓存数据失效,客户端的大量请求直接发送到数据库,导致数据库崩溃,可以通过加锁或队列、设置不同的缓存失效时间、添加二级缓存等方法避免
  • 缓存穿透:缓存没有存储服务器需要的数据或查询数据为空,服务器有大量直接访问数据库的请求。可以通过为空数据设置默认值;设置过滤器等方法缓解
  • 缓存预热:系统上线后,需要将相关需要缓存数据直接加到缓存系统中,避免需要第二次访问某些数据时才将数据加入缓存的效率低下的问题
  • 缓存更新:缓存中的过期数据没有及时更新,可以通过定期更新;根据查询语句判断是否过期等方式避免

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文速递】2025年04周 (Robotics/Embodied AI/LLM)

目录 DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning摘要 Evolving Deeper LLM Thinking摘要 Kimi k1.5: Scaling Reinforcement Learning with LLMs摘要 Agent-R: Training Language Model Agents to Reflect via Iterative Self-Train…

FortiAI 重塑Fortinet Security Fabric全面智能化进阶

专注推动网络与安全融合的全球性综合网络安全解决方案供应商 Fortinet(NASDAQ:FTNT),近日宣布,旗下 Fortinet Security Fabric 安全平台成功嵌入了 FortiAI 关键创新功能。这一举措将有效增强用户对各类新兴威胁的防护…

汽车免拆诊断案例 | 2019款大众途观L车鼓风机偶尔不工作

故障现象 一辆2019款大众途观L车,搭载DKV发动机和0DE双离合变速器,累计行驶里程约为8万km。车主进厂反映,鼓风机偶尔不工作。 故障诊断  接车后试车,鼓风机各挡位均工作正常。用故障检测仪检测,空调控制单元&#x…

MySQL为什么默认使用RR隔离级别?

大家好,我是锋哥。今天分享关于【MySQL为什么默认使用RR隔离级别?】面试题。希望对大家有帮助; MySQL为什么默认使用RR隔离级别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认使用 RR(Repeatable Read)…

目标检测篇---R-CNN梳理

目标检测系列文章 第一章 R-CNN 目录 目标检测系列文章📄 论文标题🧠 论文逻辑梳理1. 引言部分梳理 (动机与思想) 📝 三句话总结🔍 方法逻辑梳理🚀 关键创新点🔗 方法流程图补充边界框回归 (BBR)1. BBR 的…

Java技术栈 —— 基本规范

Java技术栈 —— 基本规范 一、接口文档生成工具二、接口设计2.1 开发顺序2.2 接口规范 三、数据类封装 一、接口文档生成工具 有很多jar包都支持swagger的接口文档,这样方便了接口测试,不需要用apifox自己写接口,直接调用文档里的swagger接…

Django ORM 定义模型

提示:定义模型字段的类型 文章目录 一、字段类型二、字段属性三、元信息 一、字段类型 常用字段 字段名描述备注AutoFieldint 自增必填参数 primary_keyTrue,无该字段时,django自动创建一个 BigAutoField,一个model不能有两个Au…

[密码学基础]GB与GM国密标准深度解析:定位、差异与协同发展

[密码学基础]GB与GM国密标准深度解析:定位、差异与协同发展 导语 在国产密码技术自主可控的浪潮下,GB(国家标准)与GM(密码行业标准)共同构建了我国商用密码的技术规范体系。二者在制定主体、法律效力、技术…

Day-1 漏洞攻击实战

实训任务1 漏洞攻击实战一 使用 御剑 得到网站后台地址 数据库登录与日志配置​​ 使用默认密码 root:root 登录phpMyAdmin,执行 SHOW VARIABLES LIKE general% 查看日志状态。 开启日志功能:set global general_log "ON";(配图&…

leetcode 2563. 统计公平数对的数目 中等

给你一个下标从 0 开始、长度为 n 的整数数组 nums &#xff0c;和两个整数 lower 和 upper &#xff0c;返回 公平数对的数目 。 如果 (i, j) 数对满足以下情况&#xff0c;则认为它是一个 公平数对 &#xff1a; 0 < i < j < n&#xff0c;且lower < nums[i] …

011数论——算法备赛

素数筛 给定n, 求2~n内的所有素数 埃氏筛 利用素数的定义&#xff0c; 输出素数2&#xff0c;然后筛掉2的倍数&#xff0c;得 {2,3,5,7,9,11,13&#xff0c;…}输出素数3&#xff0c;然后筛掉3的倍数&#xff0c;得 {2,3,5,7,11,13&#xff0c;…} 继续上述步骤&#xff0…

算法之贪心算法

贪心算法 贪心算法核心思想常见应用场景典型案例案例一&#xff1a;找零问题案例二&#xff1a;活动选择问题案例三&#xff1a;货仓选址问题 贪心算法的应用详解霍夫曼编码最小生成树Dijkstra最短路径算法 总结 贪心算法 核心思想 贪心算法&#xff08;Greedy Algorithm&…

英码科技与泊川软件,携手加速AI与嵌入式系统融合创新

2025年4月15日&#xff0c;广州英码信息科技有限公司&#xff08;以下简称“英码科技”&#xff09;与广州泊川软件技术有限公司&#xff08;以下简称“泊川软件”&#xff09; 正式签署战略合作框架协议。此次合作将充分发挥双方在AI计算硬件与嵌入式操作系统领域的技术优势&a…

Flowable7.x学习笔记(九)部署 BPMN XML 流程

前言 到本篇为止&#xff0c;我们已经完成了流程定义以及其 BPMN XML 本身的查询和新增功能&#xff0c;那我们有有了XML之后就可以开始着手研究实现 Flowable7对流程的各种操作了&#xff0c;比如部署&#xff0c;挂起&#xff0c;发起等等。 首先第一步&#xff0c;我们本篇文…

electron 渲染进程按钮创建新window,报BrowserWindow is not a constructor错误;

在 Electron 中&#xff0c;有主进程和渲染进程 主进程&#xff1a;在Node.js环境中运行—意味着能够使用require模块并使用所有Node.js API 渲染进程&#xff1a;每个electron应用都会为每个打开的BrowserWindow&#xff08;与每个网页嵌入&#xff09;生成一个单独的渲染器进…

深入规划 Elasticsearch 索引:策略与实践

一、Elasticsearch 索引概述 &#xff08;一&#xff09;索引基本概念 Elasticsearch 是一个分布式、高性能的全文搜索引擎&#xff0c;其核心概念之一便是索引。索引本质上是一个存储文档的逻辑容器&#xff0c;它使得数据能够在高效的检索机制下被查询到。当我们对文档进行…

llamafactory的包安装

cuda版本12.1&#xff0c;python版本3.10&#xff0c;torch版本2.4.0&#xff0c;几个关键包版本如下&#xff1a; torch2.4.0cu121 transformers4.48.3 triton3.0.0 flash-attn2.7.1.post4 xformers0.0.27.post2 vllm0.6.3.post1 vllm-flash-attn2.6.1 unsloth2025.3.18 unsl…

Redis专题

前言 Redis的各种思想跟机组Cache和操作系统对进程的管理非常类似&#xff01; 一&#xff1a;看到你的简历上写了你的项目里面用到了redis&#xff0c;为啥用redis&#xff1f; 因为传统的关系型数据库如Mysql,已经不能适用所有的场景&#xff0c;比如秒杀的库存扣减&#xff…

【Rust 精进之路之第7篇-函数之道】定义、调用与参数传递:构建代码的基本单元

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:封装逻辑,代码复用的基石 在之前的文章中,我们已经探索了 Rust 如何处理数据(变量、标量类型、复合类型)以及如何控制程序的执行流程(if/else、循环)。这些构成了编写简…

文件有几十个T,需要做rag,用ragFlow能否快速落地呢?

一、RAGFlow的优势 1、RAGFlow处理大规模数据性能&#xff1a; &#xff08;1&#xff09;、RAGFlow支持分布式索引构建&#xff0c;采用分片技术&#xff0c;能够处理TB级数据。 &#xff08;2&#xff09;、它结合向量搜索和关键词搜索&#xff0c;提高检索效率。 &#xf…