当前位置: 首页 > news >正文

数据库服务器架构

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文件中的命令重建数据库

 常见问题:

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

相关文章:

  • TDengine 存储引擎设计
  • Visual Studio 2022 运行一个后台程序而不显示控制台窗口
  • opencv 图像矫正的原理
  • iso文件在麒麟V10系统上安装达梦数据库
  • Spark,从0开始配置Spark的local模式
  • 实时进程简单说明
  • IDEA内存配置失效(已解决)
  • 龙虎榜——20250421
  • 流程执行松散,如何强化规范?
  • QT写的exe嵌入到wpf中
  • 4月22日直播预告|AI赋能开发提效,三大应用场景实战分享
  • 安恒安全渗透面试题
  • electron从安装到启动再到打包全教程
  • Eteam 0.3版本开发规划
  • 【Easylive】使用Seata解决分布式事务问题
  • 华为云获取IAM用户Token的方式及适用分析
  • 阿里云入门手册
  • 富文本编辑器
  • SSH反向代理
  • go语言的八股文
  • 体坛联播|利兹联、伯恩利重返英超,北京淘汰北控队晋级四强
  • “解压方程式”主题沙龙:用艺术、精油与自然的力量,寻找自我疗愈的方式
  • 人民日报钟声:世界决不能重回弱肉强食的时代
  • 为溶血性疾病治疗提供新靶点,专家团队在《细胞》发文
  • 鲁比奥称“美或退出俄乌谈判”,欧洲官员:为了施压乌克兰
  • 央视网评论员:婚约不是性许可——山西订婚强奸案背后的性教育盲区