预购商品
书目分类
特别推荐
本書將以電商應用場景為例,講解不同規模的存儲系統應該如何構建。本書的章節是按照系統的發展過程來設計,分成了設計篇、高速增長篇、海量資料篇和技術進階篇。 在設計篇中,重點介紹如何從0到1地設計電商系統的各個存儲架構。在高速增長篇中,重點關注在高速變化的過程中系統所遇到的共通性問題,以及應對這些問題的方法。 在海量資料篇中,重點解決高併發、海量資料情況下的存儲系統應該如何設計的問題。在技術進階篇中,重點探討在存儲技術領域,有哪些新技術值得關注,哪些技術可能成為未來的發展趨勢。畢竟,不斷創新是技術發展的原動力。
前言 換一種方式學習存儲系統 第一篇 設計 第1章 如何設計電商系統 3 1.1 設計電商系統的核心流程 4 1.2 根據流程劃分功能模組 6 1.3 小結 9 1.4 思考題 10 第2章 訂單系統的設計:確保訂單資料的準確性 11 2.1 訂單系統的核心功能和資料 12 2.2 如何避免重複下單 13 2.3 如何解決ABA問題 16 2.4 小結 18 2.5 思考題 19 第3章 商品系統的存儲架構設計 20 3.1 商品系統需要保存哪些資料 21 3.2 如何存儲商品的基本資訊 22 3.3 使用MongoDB保存商品參數 23 3.4 使用物件存儲保存圖片和視頻 24 3.5 將商品介紹靜態化 25 3.6 小結 26 3.7 思考題 28 第4章 購物車系統的存儲架構:前後端混合存儲 29 4.1 設計購物車系統的存儲架構時需要把握什麼原則 30 4.2 如何設計“暫存購物車”的存儲 32 4.3 如何設計“使用者購物車”的存儲 34 4.4 小結 36 4.5 思考題 37 第5章 帳戶系統:用事務解決對賬問題 38 5.1 為什麼總是對不上帳 39 5.2 使用資料庫事務保證資料的一致性 40 5.3 理解事務的隔離級別 42 5.4 小結 49 5.5 思考題 50 第6章 分散式事務:保證多個系統間的資料一致 51 6.1 什麼是分散式事務 52 6.2 2PC:訂單與優惠券的資料一致性問題 53 6.3 本地消息表:訂單與購物車的資料一致性問題 57 6.4 小結 59 6.5 思考題 59 第7章 用Elasticsearch構建商品搜索系統 60 7.1 理解倒排索引機制 60 7.2 如何在ES中構建商品的索引 63 7.3 小結 67 7.4 思考題 68 第8章 備份與恢復 69 8.1 如何更安全地實現資料備份和恢復 70 8.2 配置MySQL HA實現高可用性 73 8.3 小結 75 8.4 思考題 76 第二篇 高速增長 第9章 優化SQL 79 9.1 每個系統必踩的“坑”:訪問資料庫超時 79 9.1.1 事故排查過程 79 9.1.2 如何避免悲劇重演 85 9.1.3 小結 87 9.1.4 思考題 88 9.2 如何避免寫出“慢SQL” 88 9.2.1 定量認識MySQL 88 9.2.2 使用索引避免全資料表掃描 90 9.2.3 分析SQL執行計畫 92 9.2.4 小結 93 9.2.5 思考題 94 9.3 SQL在資料庫中的執行 94 9.3.1 SQL在執行器中是如何執行的 95 9.3.2 SQL在存儲引擎中是如何執行的 98 9.3.3 小結 100 9.3.4 思考題 101 第10章 MySQL應對高併發 102 10.1 使用緩存保護MySQL 102 10.1.1 更新緩存的方式 103 10.1.2 注意避免緩存穿透引起雪崩 105 10.1.3 小結 107 10.1.4 思考題 107 10.2 讀寫分離 107 10.2.1 讀寫分離是提升MySQL併發能力的方案 108 10.2.2 注意讀寫分離帶來的資料不一致問題 111 10.2.3 小結 112 10.2.4 思考題 113 10.3 實現MySQL主從資料庫同步 113 10.3.1 如何配置MySQL的主從同步 113 10.3.2 複製狀態機:所有分散式存儲都是這樣複製資料的 116 10.3.3 小結 117 10.3.4 思考題 118 第三篇 海量資料 第11章 MySQL應對海量數據 121 11.1 歸檔歷史資料 121 11.1.1 存檔歷史訂單資料提升查詢性能 122 11.1.2 如何批量刪除大量資料 124 11.1.3 小結 127 11.1.4 思考題 128 11.2 分庫分表 128 11.2.1 如何規劃分庫分表 129 11.2.2 如何選擇分片鍵 130 11.2.3 如何選擇分片演算法 131 11.2.4 小結 133 11.2.5 思考題 134 第12章 緩存海量數據 135 12.1 用Redis構建緩存集群的實踐 135 12.1.1 Redis Cluster如何應對海量資料、高可用和高併發問題 136 12.1.2 為什麼Redis Cluster不適合超大規模集群 138 12.1.3 如何用Redis構建超大規模集群 139 12.1.4 小結 141 12.1.5 思考題 142 12.2 大型企業如何實現MySQL到Redis的同步 142 12.2.1 緩存穿透:超大規模系統的不能承受之痛 142 12.2.2 使用Binlog即時更新Redis緩存 144 12.2.3 小結 149 12.2.4 思考題 150 12.3 基於Binlog實現跨系統即時資料同步 150 12.3.1 使用Binlog和訊息佇列構建即時資料同步系51 12.3.2 如何保證資料同步的即時性 152 12.3.3 小結 154 12.3.4 思考題 154 第13章 更換資料庫 155 13.1 如何實現不停機更換資料庫 155 13.2 如何實現比對和補償程式 158 13.3 小結 160 13.4 思考題 160 第14章 物件存儲:最簡單的分散式存儲系61 14.1 物件存儲資料是如何保存大檔的 162 14.2 如何拆分和保存大檔物件 163 14.3 小結 166 14.4 思考題 167 第15章 海量資料的存儲與查詢 168 15.1 如何存儲前端埋點之類的海量資料 168 15.1.1 使用Kafka存儲海量原始資料 169 15.1.2 使用HDFS存儲更大規模的資料 171 15.1.3 小結 173 15.1.4 思考題 173 15.2 面對海量資料,如何才能查得更快 173 15.2.1 常用的分析類系統應該如何選擇存儲 174 15.2.2 轉變思想:根據查詢選擇存儲系76 15.2.3 小結 178 15.2.4 思考題 178 第16章 存儲系統的技術選型 179 16.1 技術選型時應該考慮哪些因素 180 16.2 線上業務系統如何選擇存儲產品 182 16.3 分析系統如何選擇存儲產品 183 16.4 小結 183 16.5 思考題 184 第四篇 技術展望 第17章 使用NewSQL解決高可用和分片難題 187 17.1 什麼是NewSQL 187 17.2 CockroachDB如何實現資料分片和彈性擴容 188 17.3 CockroachDB能提供金融級的事務隔離性嗎 190 17.4 小結 193 17.5 思考題 193 第18章 RocksDB:不丟資料的高性能KV存儲 194 18.1 同樣是KV存儲,RocksDB有哪些不同 195 18.2 LSM-Tree如何兼顧讀寫性能 196 18.3 小結 199 18.4 思考題 199 附錄A 測試題及解析 200 附錄B 思考題解析 206 後記 讓奮鬥成為習慣 219
客服公告
热门活动
订阅电子报