摘要:個人博客地址方案項目背景在現在題庫架構下,針對新購買的多道數據進行整合,不影響現有功能。數據切分盡量通過數據冗余或表分組來降低跨庫的可能。
個人博客地址 https://www.texixi.com/2019/0...方案 項目背景
在現在題庫架構下,針對新購買的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(未使用)一個徹底開源的,面向企業應用開發的大數據庫集群
支持事務、ACID、可以替代MySQL的加強版數據庫
一個可以視為MySQL集群的企業級數據庫,用來替代昂貴的Oracle集群
一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server
結合傳統數據庫和新型分布式數據倉庫的新一代企業級數據庫產品
一個新穎的數據庫中間件產品
==支持庫內分表(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的核心作用。
分片分析、路由分析、讀寫分離分析、緩存分析等,然后將此SQL發往后端的真實數據庫,并將返回的結果做適當的處理,最終再返回給用戶。
讀寫分離,配置簡單
分表分庫,對于超過1000萬的表進行分片,最大支持1000億的單表分片
報表系統,借助于Mycat的分表能力,處理大規模報表的統計
應用場景 那些適合,那些不適合 https://www.cnblogs.com/barry...
使用說明 https://juejin.im/post/59c325...
總表使用mysql MERGE 引擎(不考慮)合并的表使用的必須是MyISAM引擎
表的結構必須一致,包括索引、字段類型、引擎和字符集
對于增刪改查,直接操作總表即可。
數據切分原則能不切分盡量不要切分。
如果要切分一定要選擇合適的切分規則,提前規劃好。
數據切分盡量通過數據冗余或表分組(Table Group)來降低跨庫 Join 的可能。
由于數據庫中間件對數據 Join 實現的優劣難以把握,而且實現高性能難度極大,業務讀取盡量少使用多表 Join。
盡可能的比較均勻分布數據到各個節點上
該業務字段是最頻繁的或者最重要的查詢條件。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30062.html
摘要:開篇金幣積分商城下稱商城是眾多內的一個產品,隨著使用的用戶越來越多,商城對于用戶留存的提升,扮演著重要的角色做為提高用戶黏性的核心產品,在擁有很好用戶體驗的同時,也必須存在著一個高效穩定的系統。分析上述兩點,得到結論按用戶進行分庫分表。 開篇 金幣(積分)商城(下稱商城)是眾多App內的一個產品,隨著App使用的用戶越來越多,商城對于用戶留存的提升,扮演著重要的角色;做為提高用戶黏性的...
摘要:這里有一份面試題相關總結,涉及高并發分布式高可用相關知識點,在此分享給大家,希望大家能拿到一份理想的知識點會陸續更新在上,覺得還算湊和的話可以關注一下噢高并發架構消息隊列為什么使用消息隊列消息隊列有什么優點和缺點都有什么優點和缺點如何保證消 這里有一份面試題相關總結,涉及高并發、分布式、高可用相關知識點,在此分享給大家,希望大家能拿到一份理想的 Offer! 知識點會陸續更新在 Git...
閱讀 3715·2021-11-17 09:33
閱讀 2725·2021-09-22 15:12
閱讀 3344·2021-08-12 13:24
閱讀 2439·2019-08-30 11:14
閱讀 1733·2019-08-29 14:09
閱讀 1325·2019-08-26 14:01
閱讀 3061·2019-08-26 13:49
閱讀 1774·2019-08-26 12:16