方案

项目背景

在现在题库架构下,针对新购买的1300W多道数据进行整合,不影响现有功能。由于数据量偏多,需要进行数据的切分

目标场景

兼容旧的功能

对1300多W数据进行分库分表

需要对旧的数据进行整合

老师端选题组卷 可以根据 学段、学科、知识点、难度、题型 来筛选

学生端根据老师端所选题目获取对应的题目

对3年内以后扩展的增量数据预留数量空间

数据样例

学段

数据量

小学

1285336

初中

6655780

高中

6144072

学段学科

数据量

初中数学

1869524

初中化学

1356224

初中英语

288440

切分方案一

切分为3个库, 分别是小学、初中、高中 数据占比如上

每个库切分10个表 根据 (学科+首级知识点)%10

每个库一个总表

缺点:例:用到不同知识点时,需要多表获取数据

优点:数据分布较为平均

切分方案二 (采用)

切分为3个库, 分别是小学、初中、高中 数据占比如上

每个库切分10个表(全部10个学科) 根据 学科区分, 例: 数学表、物理表

每个库一个总表

缺点:数据不大平均, 数据量多的例数学有186W多、英语28W多

优点:当有用到组卷等需要筛选多知识点题目时,不用多表查询

数据id 自增区间划分

小学 1-2亿

中学 2-3亿

高中 3亿起

关联关系图

根据知识点获取题目流程

自增id

对原有的id区间段不做处理

对切分后的id自增段进行规划

兼容旧功能

解决的问题

新旧数据有重复的知识点、题目

新旧数据的结构不一样

对旧的题库功能代码的修改

两套题库合并主键冲突问题

兼容旧功能 方案一 (个人推荐)

有操作的旧的数据洗入新的结构,旧的数据只为兼容原有的功能数据,不做显示。

优点:

不用变动数据结构,最新的购买的数据结构较为清晰。 易维护扩展,因为目前旧的数据已经整合了两套数据

缺点:

需要修改全部旧有的功能代码(针对新的数据结构)

兼容旧功能 方案二

把新购买的数据整合进老的数据结构,同时保留三批数据,需要处理所有表的主键冲突、三批各表数据去重

优点:

旧有代码只修改数据结构切分的部分,不用全部修改功能代码

缺点:

数据较乱,三套不同的数据同时存在数据库

需要处理新的结构整合进旧的数据结构,同时需要处理主键冲突,

代码上需要处理对应的数据

问题点

测试环境和正式环境图片存放在那里?100多G,上传cdn需要几十天时间,有4000多W张,目前cdn不支持打包上传

解决方案:购买单独服务器,主备,存放图片

测试db 正式db 1300多w 目前占用100G左右, 需要存放空间

解决方案:测试环境新加硬盘,新加db实例端口3307,正式环境db存放在图片服务器

代码设计模式

采用适配器模式(原先的代码结构不变)

类图

调研内容

中间件MYCAT(未使用)

什么是MYCAT

一个彻底开源的,面向企业应用开发的大数据库集群

支持事务、ACID、可以替代MySQL的加强版数据库

一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群

一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server

结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

一个新颖的数据库中间件产品

MYCAT特性

==支持库内分表(1.6)==

==支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join==

支持全局序列号,解决分布式下的主键生成问题。

==分片规则丰富==,插件化开发,易于扩展。

基于Nio实现,有效管理线程,解决高并发问题。

==支持通过全局表,ER关系的分片策略,实现了高效的多表join查询==

支持分布式事务(弱xa)。

支持SQL黑名单、sql注入攻击拦截

==支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法==

==遵守Mysql原生协议==,跨语言,跨平台,跨数据库的通用中间件代理。

==基于心跳的自动故障切换,支持读写分离,支持MySQL主从,==以及galera cluster集群。

可以大幅降低开发难度,提升开发速度

Mycat 注意事项

全局表一致性检测 1.6版本开始支持(一致性的定时检测)

分片 join(尽量避免使用 Left join 或 Right join,而用 Inner join)

Mycat 原理

应用要面对很多个数据库的时候,这个时候就需要对数据库层做一个抽象,来管理这些数据库,而最上面的应用只需要面对一个数据库层的抽象或者说数据库中间件就好了,这就是Mycat的核心作用。

分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

Mycat 应用场景

读写分离,配置简单

分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片

报表系统,借助于Mycat的分表能力,处理大规模报表的统计

文章整理

总表使用mysql MERGE 引擎(不考虑)

合并的表使用的必须是MyISAM引擎

表的结构必须一致,包括索引、字段类型、引擎和字符集

对于增删改查,直接操作总表即可。

数据切分原则

能不切分尽量不要切分。

如果要切分一定要选择合适的切分规则,提前规划好。

数据切分尽量通过数据冗余或表分组(Table Group)来降低跨库 Join 的可能。

由于数据库中间件对数据 Join 实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量少使用多表 Join。

尽可能的比较均匀分布数据到各个节点上

该业务字段是最频繁的或者最重要的查询条件。

oracle分库分表原理_题库分库分表架构方案相关推荐

  1. 《管理学原理》题库(4套)

    <管理学原理>题库(4套版) 一.客观题(单选题) 1."管理活动的构成要素是计划.组织.指挥.协调和控制",提出这个观点的代表人物是(A) A.法约尔   B.西蒙  ...

  2. python资源管理器 计算机项目下的_高级语言程序设计(Python)_中国大学MOOC(慕课)_题库及答案...

    高级语言程序设计(Python)_中国大学MOOC(慕课)_题库及答案 来源:未知 编辑:admin 时间:2020-06-30 更多相关问题 以下选项中能正确调用fun函数的语句是charfun(c ...

  3. 通信原理包络是什么意思_2021年通信原理考研题库

    原标题:2021年通信原理考研题库 考研真题精选 一.选择题 1十六进制数字信号的传码率是1200B,则传信率为( ):如果传信率不变,则八进制传码率为( ).[南京邮电大学2010.2009研] A ...

  4. 电大计算机网考选择题库,电大本科计算机应用基础_题库_计算机网考_真题选择题详细分析...

    电大本科计算机应用基础_题库_计算机网考_真题选择题详细分析 (47页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 全国网络统考< ...

  5. python题库和答案_Python数据分析与数据可视化_题库免费答案2020

    Python数据分析与数据可视化_题库免费答案2020 更多相关问题 撰写纪要时,发现与会者发言质量不高时,可以进行拔高.提炼,一定要做好后期加工.() 在发布的对象中,凡是属于法规性文件,标题和正文 ...

  6. oracle删除库里的所有表,清空mysql指定库里全部表数据-自动删除所有表,有外键约束的表优先删除...

    清空mysql指定库里所有表数据-自动删除所有表,有外键约束的表优先删除 由于要清空数据库数据 ,手动非常麻烦.网上找了一下,有一个Oracle的,参照它,在其上修改一下用于Mysql,把代码奉献如下 ...

  7. 计算机原理考研题库,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库.pdf...

    2022考研 853计算机专业基础综合 <计算机组成原理>复习笔记及考 研真题题库 计算机系统概论 一.计算机的分类 1电子模拟计算机 模拟计算机的特点是数值由连续量来表示,运算过程也是连 ...

  8. 计算机三级网络技术大题详解,教你快速拿到60分,附三级题库绿色免安装

    计算机三级大题,详解,通俗易懂 博主今天亲自参加了NCRE的三级网络技术,感觉题目还可以,现在迫不及待的给你们大家分享了自己在网上找的资源,感觉大题就是这些题中的几道,覆盖的特全面,再次声明这个是我在 ...

  9. vba调用mysql随机出题软件_题库需要随机进行出题

    Function 随机试题()    '产生随机数代码,40个随机数字从1-100中取 '1.声明变量 Dim dx As Integer            '随机单选题数值 Dim dxjh A ...

最新文章

  1. 黄山学院计算机课,黄山学院非计算机类专业计算机课程教学管理规定
  2. 27、Power Query-日期与时间数据处理实例(图书室借书统计)
  3. Android 第三课 构建简单的用户界面
  4. ITK:处理3D图像的2D切片
  5. java 很垃圾_JAVA吧真的很垃圾!!!
  6. 带有JSF,Servlet和CDI的DynamicReports和JasperReports
  7. 从优青到杰青:优秀青年科技人才成长典型特征
  8. SAP License:我应该怎么学习SAP?
  9. APK 包名修改工具
  10. SpringBoot单元测试@Test没有run的解决方法
  11. 学生成绩管理系统(Java)
  12. 计算机生存代码,方舟生存进化OL代码大全 最新最全的代码
  13. Linux命令之snmpwalk命令
  14. 小米 12 Ultra 搭载 3D ToF 摄像头和 Surge C2 ISP
  15. OMF(Oracle Managed Files,Oracle管理的文件)介绍
  16. Packet Tracer 5.0建构CCNA实验攻略——帧中继Frame Relay
  17. 项目启动成功,但是Eureka页面不显示
  18. 如何提取header中指定字段
  19. html css print打印,打印样式
  20. 我理解的MOOC的重要性

热门文章

  1. Vim配置文件(.vimrc)详解
  2. 【后端教程】细化 Flutter List 内存回收,解决大 Cell 问题
  3. 怎样处理糟糕的代码?
  4. python中for循环遍历列表的几种方法
  5. 国家战略之什么是新基建?
  6. 后端工程师的前端之路系列(二)
  7. Surface Laptop安装双系统(原Win10+CentOS 7)
  8. 使用SSH连接防火墙
  9. javascript三元表达式
  10. C#API大全-C# WIN32 API大全