摘要:個(gè)人博客地址方案項(xiàng)目背景在現(xiàn)在題庫(kù)架構(gòu)下,針對(duì)新購(gòu)買的多道數(shù)據(jù)進(jìn)行整合,不影響現(xiàn)有功能。數(shù)據(jù)切分盡量通過數(shù)據(jù)冗余或表分組來(lái)降低跨庫(kù)的可能。
個(gè)人博客地址 https://www.texixi.com/2019/0...方案 項(xiàng)目背景
在現(xiàn)在題庫(kù)架構(gòu)下,針對(duì)新購(gòu)買的1300W多道數(shù)據(jù)進(jìn)行整合,不影響現(xiàn)有功能。由于數(shù)據(jù)量偏多,需要進(jìn)行數(shù)據(jù)的切分
目標(biāo)場(chǎng)景兼容舊的功能
對(duì)1300多W數(shù)據(jù)進(jìn)行分庫(kù)分表
需要對(duì)舊的數(shù)據(jù)進(jìn)行整合
老師端選題組卷 可以根據(jù) 學(xué)段、學(xué)科、知識(shí)點(diǎn)、難度、題型 來(lái)篩選
學(xué)生端根據(jù)老師端所選題目獲取對(duì)應(yīng)的題目
對(duì)3年內(nèi)以后擴(kuò)展的增量數(shù)據(jù)預(yù)留數(shù)量空間
數(shù)據(jù)樣例學(xué)段 | 數(shù)據(jù)量 |
---|---|
小學(xué) | 1285336 |
初中 | 6655780 |
高中 | 6144072 |
學(xué)段學(xué)科 | 數(shù)據(jù)量 |
---|---|
初中數(shù)學(xué) | 1869524 |
初中化學(xué) | 1356224 |
初中英語(yǔ) | 288440 |
切分為3個(gè)庫(kù), 分別是小學(xué)、初中、高中 數(shù)據(jù)占比如上
每個(gè)庫(kù)切分10個(gè)表 根據(jù) (學(xué)科+首級(jí)知識(shí)點(diǎn))%10
每個(gè)庫(kù)一個(gè)總表
缺點(diǎn):例:用到不同知識(shí)點(diǎn)時(shí),需要多表獲取數(shù)據(jù)
優(yōu)點(diǎn):數(shù)據(jù)分布較為平均
切分方案二 (采用)切分為3個(gè)庫(kù), 分別是小學(xué)、初中、高中 數(shù)據(jù)占比如上
每個(gè)庫(kù)切分10個(gè)表(全部10個(gè)學(xué)科) 根據(jù) 學(xué)科區(qū)分, 例: 數(shù)學(xué)表、物理表
每個(gè)庫(kù)一個(gè)總表
缺點(diǎn):數(shù)據(jù)不大平均, 數(shù)據(jù)量多的例數(shù)學(xué)有186W多、英語(yǔ)28W多
優(yōu)點(diǎn):當(dāng)有用到組卷等需要篩選多知識(shí)點(diǎn)題目時(shí),不用多表查詢
數(shù)據(jù)id 自增區(qū)間劃分小學(xué) 1-2億
中學(xué) 2-3億
高中 3億起
關(guān)聯(lián)關(guān)系圖 根據(jù)知識(shí)點(diǎn)獲取題目流程 自增id對(duì)原有的id區(qū)間段不做處理
對(duì)切分后的id自增段進(jìn)行規(guī)劃
兼容舊功能新舊數(shù)據(jù)有重復(fù)的知識(shí)點(diǎn)、題目
新舊數(shù)據(jù)的結(jié)構(gòu)不一樣
對(duì)舊的題庫(kù)功能代碼的修改
兩套題庫(kù)合并主鍵沖突問題
有操作的舊的數(shù)據(jù)洗入新的結(jié)構(gòu),舊的數(shù)據(jù)只為兼容原有的功能數(shù)據(jù),不做顯示。
優(yōu)點(diǎn):
不用變動(dòng)數(shù)據(jù)結(jié)構(gòu),最新的購(gòu)買的數(shù)據(jù)結(jié)構(gòu)較為清晰。 易維護(hù)擴(kuò)展,因?yàn)槟壳芭f的數(shù)據(jù)已經(jīng)整合了兩套數(shù)據(jù)
缺點(diǎn):
需要修改全部舊有的功能代碼(針對(duì)新的數(shù)據(jù)結(jié)構(gòu))
把新購(gòu)買的數(shù)據(jù)整合進(jìn)老的數(shù)據(jù)結(jié)構(gòu),同時(shí)保留三批數(shù)據(jù),需要處理所有表的主鍵沖突、三批各表數(shù)據(jù)去重
優(yōu)點(diǎn):
舊有代碼只修改數(shù)據(jù)結(jié)構(gòu)切分的部分,不用全部修改功能代碼
缺點(diǎn):
數(shù)據(jù)較亂,三套不同的數(shù)據(jù)同時(shí)存在數(shù)據(jù)庫(kù)
需要處理新的結(jié)構(gòu)整合進(jìn)舊的數(shù)據(jù)結(jié)構(gòu),同時(shí)需要處理主鍵沖突,
代碼上需要處理對(duì)應(yīng)的數(shù)據(jù)
問題點(diǎn)測(cè)試環(huán)境和正式環(huán)境圖片存放在那里?100多G,上傳cdn需要幾十天時(shí)間,有4000多W張,目前cdn不支持打包上傳
解決方案:購(gòu)買多帶帶服務(wù)器,主備,存放圖片
測(cè)試db 正式db 1300多w 目前占用100G左右, 需要存放空間
解決方案:測(cè)試環(huán)境新加硬盤,新加db實(shí)例端口3307,正式環(huán)境db存放在圖片服務(wù)器
代碼設(shè)計(jì)模式采用適配器模式(原先的代碼結(jié)構(gòu)不變)
類圖
調(diào)研內(nèi)容 中間件MYCAT(未使用)一個(gè)徹底開源的,面向企業(yè)應(yīng)用開發(fā)的大數(shù)據(jù)庫(kù)集群
支持事務(wù)、ACID、可以替代MySQL的加強(qiáng)版數(shù)據(jù)庫(kù)
一個(gè)可以視為MySQL集群的企業(yè)級(jí)數(shù)據(jù)庫(kù),用來(lái)替代昂貴的Oracle集群
一個(gè)融合內(nèi)存緩存技術(shù)、NoSQL技術(shù)、HDFS大數(shù)據(jù)的新型SQL Server
結(jié)合傳統(tǒng)數(shù)據(jù)庫(kù)和新型分布式數(shù)據(jù)倉(cāng)庫(kù)的新一代企業(yè)級(jí)數(shù)據(jù)庫(kù)產(chǎn)品
一個(gè)新穎的數(shù)據(jù)庫(kù)中間件產(chǎn)品
==支持庫(kù)內(nèi)分表(1.6)==
==支持單庫(kù)內(nèi)部任意join,支持跨庫(kù)2表join,甚至基于caltlet的多表join==
支持全局序列號(hào),解決分布式下的主鍵生成問題。
==分片規(guī)則豐富==,插件化開發(fā),易于擴(kuò)展。
基于Nio實(shí)現(xiàn),有效管理線程,解決高并發(fā)問題。
==支持通過全局表,ER關(guān)系的分片策略,實(shí)現(xiàn)了高效的多表join查詢==
支持分布式事務(wù)(弱xa)。
支持SQL黑名單、sql注入攻擊攔截
==支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常見SQL語(yǔ)法==
==遵守Mysql原生協(xié)議==,跨語(yǔ)言,跨平臺(tái),跨數(shù)據(jù)庫(kù)的通用中間件代理。
==基于心跳的自動(dòng)故障切換,支持讀寫分離,支持MySQL主從,==以及galera cluster集群。
可以大幅降低開發(fā)難度,提升開發(fā)速度
具體看 mycat 官網(wǎng)
全局表一致性檢測(cè) 1.6版本開始支持(一致性的定時(shí)檢測(cè))
分片 join(盡量避免使用 Left join 或 Right join,而用 Inner join)
應(yīng)用要面對(duì)很多個(gè)數(shù)據(jù)庫(kù)的時(shí)候,這個(gè)時(shí)候就需要對(duì)數(shù)據(jù)庫(kù)層做一個(gè)抽象,來(lái)管理這些數(shù)據(jù)庫(kù),而最上面的應(yīng)用只需要面對(duì)一個(gè)數(shù)據(jù)庫(kù)層的抽象或者說數(shù)據(jù)庫(kù)中間件就好了,這就是Mycat的核心作用。
分片分析、路由分析、讀寫分離分析、緩存分析等,然后將此SQL發(fā)往后端的真實(shí)數(shù)據(jù)庫(kù),并將返回的結(jié)果做適當(dāng)?shù)奶幚?,最終再返回給用戶。
讀寫分離,配置簡(jiǎn)單
分表分庫(kù),對(duì)于超過1000萬(wàn)的表進(jìn)行分片,最大支持1000億的單表分片
報(bào)表系統(tǒng),借助于Mycat的分表能力,處理大規(guī)模報(bào)表的統(tǒng)計(jì)
應(yīng)用場(chǎng)景 那些適合,那些不適合 https://www.cnblogs.com/barry...
使用說明 https://juejin.im/post/59c325...
總表使用mysql MERGE 引擎(不考慮)合并的表使用的必須是MyISAM引擎
表的結(jié)構(gòu)必須一致,包括索引、字段類型、引擎和字符集
對(duì)于增刪改查,直接操作總表即可。
數(shù)據(jù)切分原則能不切分盡量不要切分。
如果要切分一定要選擇合適的切分規(guī)則,提前規(guī)劃好。
數(shù)據(jù)切分盡量通過數(shù)據(jù)冗余或表分組(Table Group)來(lái)降低跨庫(kù) Join 的可能。
由于數(shù)據(jù)庫(kù)中間件對(duì)數(shù)據(jù) Join 實(shí)現(xiàn)的優(yōu)劣難以把握,而且實(shí)現(xiàn)高性能難度極大,業(yè)務(wù)讀取盡量少使用多表 Join。
盡可能的比較均勻分布數(shù)據(jù)到各個(gè)節(jié)點(diǎn)上
該業(yè)務(wù)字段是最頻繁的或者最重要的查詢條件。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30062.html
摘要:開篇金幣積分商城下稱商城是眾多內(nèi)的一個(gè)產(chǎn)品,隨著使用的用戶越來(lái)越多,商城對(duì)于用戶留存的提升,扮演著重要的角色做為提高用戶黏性的核心產(chǎn)品,在擁有很好用戶體驗(yàn)的同時(shí),也必須存在著一個(gè)高效穩(wěn)定的系統(tǒng)。分析上述兩點(diǎn),得到結(jié)論按用戶進(jìn)行分庫(kù)分表。 開篇 金幣(積分)商城(下稱商城)是眾多App內(nèi)的一個(gè)產(chǎn)品,隨著App使用的用戶越來(lái)越多,商城對(duì)于用戶留存的提升,扮演著重要的角色;做為提高用戶黏性的...
摘要:這里有一份面試題相關(guān)總結(jié),涉及高并發(fā)分布式高可用相關(guān)知識(shí)點(diǎn),在此分享給大家,希望大家能拿到一份理想的知識(shí)點(diǎn)會(huì)陸續(xù)更新在上,覺得還算湊和的話可以關(guān)注一下噢高并發(fā)架構(gòu)消息隊(duì)列為什么使用消息隊(duì)列消息隊(duì)列有什么優(yōu)點(diǎn)和缺點(diǎn)都有什么優(yōu)點(diǎn)和缺點(diǎn)如何保證消 這里有一份面試題相關(guān)總結(jié),涉及高并發(fā)、分布式、高可用相關(guān)知識(shí)點(diǎn),在此分享給大家,希望大家能拿到一份理想的 Offer! 知識(shí)點(diǎn)會(huì)陸續(xù)更新在 Git...
摘要:如成千上萬(wàn)的螞蟻完成一項(xiàng)搬運(yùn)工作縱向擴(kuò)展又叫垂直擴(kuò)展,擴(kuò)展一個(gè)點(diǎn)的能力支撐更大的請(qǐng)求。如利用個(gè)人的能力,如蜘蛛俠逼?;疖噮⒖挤謳?kù)分表的基本思想 一 概念:什么是分庫(kù)分表(sharding) 1 將集中于單一節(jié)點(diǎn)的數(shù)據(jù)拆分并分別存儲(chǔ)到多個(gè)數(shù)據(jù)庫(kù)或表,稱為分庫(kù)分表 2 數(shù)據(jù)切分分為兩種方式,垂直切分和水平切分 3 分庫(kù):因?yàn)楸矶鄬?dǎo)致數(shù)據(jù)過多使用垂直切分,垂直切分就是根據(jù)業(yè)務(wù)的耦合性,將關(guān)聯(lián)...
閱讀 3758·2021-11-17 09:33
閱讀 2794·2021-09-22 15:12
閱讀 3380·2021-08-12 13:24
閱讀 2473·2019-08-30 11:14
閱讀 1762·2019-08-29 14:09
閱讀 1349·2019-08-26 14:01
閱讀 3094·2019-08-26 13:49
閱讀 1808·2019-08-26 12:16