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