高併發,大資料量系統的資料結構優化思路
1.網際網路浪潮面臨的問題
大資料量
設計及測試階段,由於資料量小,很難發現薄弱之處。
高併發
系統投產初期,由於負荷低,可以滿足常規的使用要求,不易發現問題。
隨著業務量逐漸增大,各種營銷活動的開展。資料效能問題成為系統執行的主要瓶頸。
2.常規的解決手段
2.1資料庫連線池
- 選擇高效能的資料庫連線池元件,如druid,hikari
2.2讀寫分離
- 考慮主庫與只讀庫同步的問題。
2.3資料庫設計
2.3.1分庫分表
- 單庫單表與分庫分表存在效能差異。
- 分割槽與分庫分表存在效能差異,且分割槽靈活性不夠。
水平拆分
拆分原則:3年內,oracle單表達2000w,mysql單表達500萬
- 常見方案:按照uid拼接的一定規則進行拆分,查詢時確保單庫單表。
- 基礎資料同步問題:定時從主庫拉取重新整理+訊息通知。
- 服務端框架Mycat,sharding-proxy
- 客戶端框架sharding-jdbc
- 熱點賬戶問題:賬戶切分
垂直拆分
拆分原則:按業務
- 目的:減少單表欄位數。
- 按業務拆分:如訂單資料,按照商戶,使用者,支付通道進行拆分。
- 各庫儲存全域性(流程)的唯一流水號,以方便追溯。
2.3.2適度的反正規化設計
- 在保證資料完整性,唯一性的前提下,可適度的增加冗餘欄位,避免聯表查詢。一般情況下,如果join的表資料超過1萬條,就會出現效能問題。
2.3.3儘量不用sequence做主鍵
- 不便於系統的遷移和資料恢復
- 多一次與資料庫的互動
2.4優化查詢
- 儘量減少對資料庫的訪問次數
第1級:訂單資料和支付流水資料;這兩塊資料對實時性和精確性要求很高,所以不新增任何快取,讀寫操作將直接運算元據庫。
第2級:使用者相關資料;這些資料和使用者相關,具有讀多寫少的特徵,所以可使用redis進行快取。
第3級:支付配置資訊;這些資料和使用者無關,具有資料量小,頻繁讀,幾乎不修改的特徵,所以我們使用本地記憶體進行快取。
- 儘量減少對錶的訪問行數
- 儘量最小化結果集
- 查詢業務資料必須使用索引
- 關鍵SQL,需分析執行計劃
3.微服務面臨的問題
3.1資料一致性問題
- 2PC
- 3PC
- TCC
- 訊息確保
- saga
推薦訊息確保和saga
3.2連線數過多問題
- 在交易量較小,應用拆分顆粒度較粗的階段,可通過制度手段管理應用配置資料庫連線數過大的問題。
- 微服務及容器化後,子系統拆分的越來越多,資料庫連線數會成為珍貴資源,可採用中心化的資料庫服務中介軟體(如Mycat)做為解決方案。
4.附錄
資料型別對比
Mysql | Oracle | Java | 說明 |
---|---|---|---|
BIGINT | NUMBER | java.lang.Long | |
CHAR | CHAR | java.lang.String | 定長 |
DECIMAL | NUMBER | java.math.BigDecimal | 金額(分) |
VARCHAR | VARCHAR2 | java.lang.String | |
FLOAT | FLOAT | java.lang.Float | |
INT | NUMBER | java.lang.Integer | |
TIMESTAMP | TIMESTAMP | java.sql.Timestamp |
參考資料:https://blog.csdn.net/chenpeng19910926/article/details/51789934
相關文章
- 大資料量高併發的資料庫優化大資料資料庫優化
- 高併發IM系統架構優化實踐架構優化
- 【系統優化】資料庫系統load飆高問題解決思路優化資料庫
- 微服務 - Redis快取 · 資料結構 · 持久化 · 分散式 · 高併發微服務Redis快取資料結構持久化分散式
- 構建高併發&高可用&安全的IT系統-高併發部分
- 資料庫結構的優化資料庫優化
- 系統架構效能優化思路架構優化
- 攜程大資料實踐:高併發應用架構及推薦系統案例大資料應用架構
- MySQL資料庫高併發下的引數配置優化案例MySql資料庫優化
- mysql大資料高併發處理MySql大資料
- Spark效能優化:優化資料結構Spark優化資料結構
- 大資料量資料查詢最佳化大資料
- 系統的優化思路優化
- 架構 秒殺系統優化思路架構優化
- 秒殺系統架構優化思路架構優化
- Activemq構建高併發、高可用的大規模訊息系統MQ
- 秒殺搶購思路以及高併發下資料安全
- 記一次線上商城系統高併發的優化優化
- 記,一次線上商城系統高併發的優化!優化
- 高併發&效能優化(二)------系統監控工具使用優化
- MySQL在大資料、高併發場景下的SQL語句優化和"最佳實踐"MySql大資料優化
- 結構化資料、半結構化資料和非結構化資料
- java併發資料結構之CopyOnWriteArrayListJava資料結構
- 高併發優化方向優化
- oracle 大資料量資料插入Oracle大資料
- 資料訪問層的優化思路優化
- 【系統最佳化】資料庫系統load飆高問題解決思路資料庫
- SQL Server 2005 大資料量資料儲存設計思路分享SQLServer大資料
- 資料庫高併發解決方法總結資料庫
- Java 高併發思路Java
- mysql大資料量分頁查詢方法及其優化MySql大資料優化
- MySQL資料庫高併發最佳化配置MySql資料庫
- java八股 併發+資料結構Java資料結構
- 大資料計算:結構化大資料計算的理想模式大資料模式
- 簡述高併發解決思路-如何處理海量資料(中)
- mysql 關於大資料量日誌表的優化過程MySql大資料優化
- 1455G Forbidden Value(資料結構優化dp+啟發式合併)ORB資料結構優化
- 結構化資料與非結構化資料的差異