当前位置: 首页 > 后端技术 > PHP

题库分库分表架构方案

时间:2023-03-29 23:54:55 PHP

个人博客地址https://www.texixi.com/2019/0...项目工程背景为当前题库架构下,新购买的集成1300W多路数据。影响现有功能。由于数据量大,需要对数据进行拆分。目标场景兼容旧功能。超过1300W的数据,分库分表需要整合旧数据。、难度、题型根据教师端选择的题目过滤学生端得到对应的题目。为3年内扩容的增量数据预留空间数据量。初中数学1869524初中化学1356224初中英语288440切分方案全部分为小学、初中、高中三个数据库。以上10张表按照(主题+一级知识点)%10每张分成10张表缺点:比如不同知识点时,需要多张表来获取数据。优点:数据分布比较均匀。切分方案2(采用)分为3个数据库,分别为小学、初中、高中数据。比如上面每个库按照学科区分分为10个表(都是10个学科),比如:数学表,物理表,每个库一个总表缺点:数据不平均,数据量大超过186W。英语28W有很多优点:在筛选试卷等多个知识点有用的时候,不需要查询多张表。数据id自增区间划分小学100-2亿,初中200-3亿,高中3亿根据知识点得到的关联图题目过程自增id不处理原id区间段。规划分段id自增段。兼容旧功能,解决新旧数据知识点重复,题目新旧数据结构不同的问题。题库功能代码修改两套题库合并主键冲突兼容老功能方案一(个人推荐)将带运算的旧数据洗入新结构。旧数据只兼容原功能数据,不显示。优点:不需要改动数据结构,最新购买的数据结构比较清晰。易于维护和扩展,因为旧数据已经集成了两组数据。缺点:需要修改所有旧的功能代码(针对新的数据结构)才能兼容旧的功能方案2.将新购买的数据整合到旧的数据结构中,同时要保留三批数据,需要处理所有表的主键冲突,分三批对每个表的数据进行去重。优点:老代码只修改数据结构的分段部分,不需要修改所有功能代码。缺点:数据比较杂乱,三组不同的数据同时,有一个数据库需要处理新的结构,整合到旧的数据结构中。同时需要处理主键冲突。代码需要处理相应的数据问题。测试环境和正式环境图片存放在哪里?100多G,上传CDN需要几十天,有4000多W张,目前CDN不支持打包上传解决方案:单独购买服务器,主备,存储图片测试db官方db1300多W目前占用100G左右,需要存储空间解决方法:在测试环境中添加新硬盘,在3307端口添加新的dbinstance,将正式环境中的db存储在imageserver上。代码设计方式采用适配器模式(原有代码结构保持不变)。类图研究内容中间件MYCAT(未使用)什么MYCAT是一个完全开源的,面向企业应用开发的大型数据库集群,支持事务,ACID,是一个可以替代MySQL的数据库增强版。一个企业级数据库,可以看成是MySQL集群,用来替代昂贵的Oracle集群。一个融合内存缓存技术,NoSQL技术,HDFS大数据的新SQLServer,结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品一个新颖的数据库中间件产品MYCAT特点==支持分表在数据库(1.6)====支持单库内任意join,支持跨库2表join,甚至基于caltlet的多表join==支持全局序号,解决下主键生成问题分散式。==丰富的分片规则==,插件化开发,易于扩展。基于Nio实现,有效管理线程,解决高并发问题。==通过全局表和ER关系支持分片策略,实现高效的多表连接查询==支持分布式事务(weakxa)。支持SQL黑名单,sql注入攻击拦截==支持MySQL、Oracle、DB2、SQLServer、PostgreSQL等DB常用SQL语法====遵守Mysql原生协议==,跨语言,跨平台,跨平台数据库通用中间代理。==基于心跳的自动故障转移,支持读写分离,支持MySQL主从,==和galera集群。可以大大降低开发难度,提高开发速度。详情请参考mycat官网。当Mycat原理应用需要面对很多数据库时,这时候就需要抽象出数据库层来管理这些数据库,而顶层应用只需要面对一个数据库层或者数据库中间件的抽象,这是Mycat的核心作用。分片分析、路由分析、读写分离分析、缓存分析等,然后将这条SQL发送到后端真实的数据库,并对返回的结果进行适当的处??理,最后返回给用户。Mycat应用场景读写分离,配置简单的表和数据库,分片超过1000万张表,最大支持1000亿单表分片报表系统。借助Mycat的分表能力,可以处理大规模的报表统计文章排序哪些适合哪些不适合的应用场景https://www.cnblogs.com/barry...使用说明https://www.cnblogs.com/barry.../juejin.im/post/59c325...总表使用mysqlMERGE引擎(未考虑)合并表必须使用MyISAM引擎。表的结构必须一致,包括索引、字段类型、引擎和字符集。增删改查直接操作总表即可。数据切分的原则是尽可能避免切分。如果要拆分,必须提前选择合适的拆分规则和计划。数据切分试图通过数据冗余或表分组(TableGroup)来降低跨库连接的可能性。由于数据库中间件很难把握数据join实现的优缺点,实现高性能的难度极大,业务读取尽量少用多表join。尽可能均匀地将数据分布到每个节点。该业务字段是最频繁或最重要的查询条件。