2
0
Fork 0
mirror of https://github.com/Vonng/ddia.git synced 2026-06-21 00:47:05 +08:00

update tw part doc

This commit is contained in:
Feng Ruohang 2025-08-10 16:45:41 +08:00
parent e391301906
commit 07da940dd2
5 changed files with 490 additions and 159 deletions

View file

@ -10,33 +10,44 @@ breadcrumbs: false
本書前四章介紹了資料系統底層的基礎概念,無論是在單臺機器上執行的單點資料系統,還是分佈在多臺機器上的分散式資料系統都適用。
1. [第一章](/tw/ch1) 將介紹本書使用的術語和方法。**可靠性,可伸縮性和可維護性** ,這些詞彙到底意味著什麼?如何實現這些目標?
2. [第二章](/tw/ch2) 將對幾種不同的 **資料模型和查詢語言** 進行比較。從程式設計師的角度看,這是資料庫之間最明顯的區別。不同的資料模型適用於不同的應用場景。
3. [第三章](/tw/ch3) 將深入 **儲存引擎** 內部,研究資料庫如何在磁碟上擺放資料。不同的儲存引擎針對不同的負載進行最佳化,選擇合適的儲存引擎對系統性能有巨大影響。
4. [第四章](/tw/ch4) 將對幾種不同的 **資料編碼** 進行比較。特別研究了這些格式在應用需求經常變化、模式需要隨時間演變的環境中表現如何。
1. [第一章](/tw/ch1) 將介紹 **資料系統架構中的利弊權衡**。我們將討論不同型別的資料系統(例如,分析型與事務型),以及它們在雲環境中的執行方式。
2. [第二章](/tw/ch2) 將介紹非功能性需求的定義。。**可靠性,可伸縮性和可維護性** ,這些詞彙到底意味著什麼?如何實現這些目標?
3. [第三章](/tw/ch3) 將對幾種不同的 **資料模型和查詢語言** 進行比較。從程式設計師的角度看,這是資料庫之間最明顯的區別。不同的資料模型適用於不同的應用場景。
4. [第四章](/tw/ch4) 將深入 **儲存引擎** 內部,研究資料庫如何在磁碟上擺放資料。不同的儲存引擎針對不同的負載進行最佳化,選擇合適的儲存引擎對系統性能有巨大影響。
5. [第五章](/tw/ch5) 將對幾種不同的 **資料編碼** 進行比較。特別研究了這些格式在應用需求經常變化、模式需要隨時間演變的環境中表現如何。
第二部分將專門討論在 **分散式資料系統** 中特有的問題。
[第二部分](/tw/part-ii) 將專門討論在 **分散式資料系統** 中特有的問題。
## 索引
## [1. 資料系統架構中的權衡](/tw/ch1)
- [分析型與事務型系統](/tw/ch1#sec_introduction_analytics)
- [雲服務與自託管](/tw/ch1#sec_introduction_cloud)
- [分散式與單節點系統](/tw/ch1#sec_introduction_distributed)
- [資料系統、法律與社會](/tw/ch1#sec_introduction_compliance)
- [總結](/tw/ch1#summary)
* [第一章:可靠性、可伸縮性和可維護性](/tw/ch1)
* [關於資料系統的思考](/tw/ch1#關於資料系統的思考)
* [可靠性](/tw/ch1#可靠性)
* [可伸縮性](/tw/ch1#可伸縮性)
* [可維護性](/tw/ch1#可維護性)
* [本章小結](/tw/ch1#本章小結)
* [第二章:資料模型與查詢語言](/tw/ch2)
* [關係模型與文件模型](/tw/ch2#關係模型與文件模型)
* [資料查詢語言](/tw/ch2#資料查詢語言)
* [圖資料模型](/tw/ch2#圖資料模型)
* [本章小結](/tw/ch2#本章小結)
* [第三章:儲存與檢索](/tw/ch3)
* [驅動資料庫的資料結構](/tw/ch3#驅動資料庫的資料結構)
* [事務處理還是分析?](/tw/ch3#事務處理還是分析)
* [列式儲存](/tw/ch3#列式儲存)
* [本章小結](/tw/ch3#本章小結)
* [第四章:編碼與演化](/tw/ch4)
* [編碼資料的格式](/tw/ch4#編碼資料的格式)
* [資料流的型別](/tw/ch4#資料流的型別)
* [本章小結](/tw/ch4#本章小結)
## [2. 定義非功能性需求](/tw/ch2)
- [案例研究:社交網路首頁時間線](/tw/ch2#sec_introduction_twitter)
- [描述效能](/tw/ch2#sec_introduction_percentiles)
- [可靠性與容錯](/tw/ch2#sec_introduction_reliability)
- [可伸縮性](/tw/ch2#sec_introduction_scalability)
- [可運維性](/tw/ch2#sec_introduction_maintainability)
- [總結](/tw/ch2#summary)
## [3. 資料模型與查詢語言](/tw/ch3)
- [關係模型與文件模型](/tw/ch3#sec_datamodels_history)
- [圖資料模型](/tw/ch3#sec_datamodels_graph)
- [事件溯源與 CQRS](/tw/ch3#sec_datamodels_events)
- [資料框、矩陣與陣列](/tw/ch3#sec_datamodels_dataframes)
- [總結](/tw/ch3#summary)
## [4. 儲存與檢索](/tw/ch4)
- [OLTP 系統的儲存與索引](/tw/ch4#sec_storage_oltp)
- [分析型資料儲存](/tw/ch4#sec_storage_analytics)
- [多維索引與全文索引](/tw/ch4#sec_storage_multidimensional)
- [總結](/tw/ch4#summary)
## [5. 編碼與演化](/tw/ch5)
- [編碼資料的格式](/tw/ch5#sec_encoding_formats)
- [資料流的模式](/tw/ch5#sec_encoding_dataflow)
- [總結](/tw/ch5#summary)

View file

@ -15,106 +15,111 @@ breadcrumbs: false
-------
在本書的 [第一部分](/tw/part-i) 中,我們討論了資料系統的各個方面,但僅限於資料儲存在單臺機器上的情況。現在我們到了 [第二部分](/tw/part-ii),進入更高的層次,並提出一個問題:如果 **多臺機器** 參與資料的儲存和檢索,會發生什麼?
在本書的 [第一部分](/tw/part-i) 中,我們討論了資料系統的各個方面,但僅限於資料儲存在單臺機器上的情況。
現在我們到了 [第二部分](/tw/part-ii),進入更高的層次,並提出一個問題:如果 **多臺機器** 參與資料的儲存和檢索,會發生什麼?
你可能會出於各種各樣的原因,希望將資料庫分佈到多臺機器上:
* 可伸縮性
可伸縮性
: 如果你的資料量、讀取負載、寫入負載超出單臺機器的處理能力,可以將負載分散到多臺計算機上。
如果你的資料量、讀取負載、寫入負載超出單臺機器的處理能力,可以將負載分散到多臺計算機上。
容錯 / 高可用性
: 如果你的應用需要在單臺機器(或多臺機器,網路或整個資料中心)出現故障的情況下仍然能繼續工作,則可使用多臺機器,以提供冗餘。一臺故障時,另一臺可以接管。
* 容錯 / 高可用性
延遲
: 如果在世界各地都有使用者,你也許會考慮在全球範圍部署多個伺服器,從而每個使用者可以從地理上最近的資料中心獲取服務,避免了等待網路資料包穿越半個世界。
如果你的應用需要在單臺機器(或多臺機器,網路或整個資料中心)出現故障的情況下仍然能繼續工作,則可使用多臺機器,以提供冗餘。一臺故障時,另一臺可以接管。
## 伸縮至更高的負載
* 延遲
如果你需要的只是伸縮至更高的 **負載load**,最簡單的方法就是購買更強大的機器(有時稱為 **垂直伸縮**,即 vertical scaling**向上伸縮**,即 scale up。許多處理器記憶體和磁碟可以在同一個作業系統下相互連線快速的相互連線允許任意處理器訪問記憶體或磁碟的任意部分。在這種 **共享記憶體架構shared-memory architecture** 中,所有的元件都可以看作一臺單獨的機器。
如果在世界各地都有使用者,你也許會考慮在全球範圍部署多個伺服器,從而每個使用者可以從地理上最近的資料中心獲取服務,避免了等待網路資料包穿越半個世界。
## 伸縮至更高的載荷
如果你需要的只是伸縮至更高的 **載荷load**,最簡單的方法就是購買更強大的機器(有時稱為 **垂直伸縮**,即 vertical scaling**向上伸縮**,即 scale up。許多處理器記憶體和磁碟可以在同一個作業系統下相互連線快速的相互連線允許任意處理器訪問記憶體或磁碟的任意部分。在這種 **共享記憶體架構shared-memory architecture** 中,所有的元件都可以看作一臺單獨的機器 [^i]。
[^i]: 在大型機中,儘管任意處理器都可以訪問記憶體的任意部分,但總有一些記憶體區域與一些處理器更接近(稱為 **非均勻記憶體訪問nonuniform memory access, NUMA**【1】。為了有效利用這種架構特性需要對處理進行細分以便每個處理器主要訪問臨近的記憶體這意味著即使表面上看起來只有一臺機器在執行**分割槽partitioning** 仍然是必要的。
> [!NOTE]
> 在大型機中,儘管任意處理器都可以訪問記憶體的任意部分,但總有一些記憶體區域與一些處理器更接近(稱為 **非均勻記憶體訪問nonuniform memory access, NUMA** [^1])。為了有效利用這種架構特性,需要對處理進行細分,以便每個處理器主要訪問臨近的記憶體,這意味著即使表面上看起來只有一臺機器在執行,**分割槽partitioning** 仍然是必要的。
共享記憶體方法的問題在於,成本增長速度快於線性增長:一臺有著雙倍處理器數量,雙倍記憶體大小,雙倍磁碟容量的機器,通常成本會遠遠超過原來的兩倍。而且可能因為存在瓶頸,並不足以處理雙倍的載荷。
共享記憶體架構可以提供有限的容錯能力,高階機器可以使用熱插拔的元件(不關機更換磁碟,記憶體模組,甚至處理器)—— 但它必然囿於單個地理位置的桎梏。
另一種方法是 **共享磁碟架構shared-disk architecture**,它使用多臺具有獨立處理器和記憶體的機器,但將資料儲存在機器之間共享的磁碟陣列上,這些磁碟透過快速網路連線 [^ii]。這種架構用於某些資料倉庫,但競爭和鎖定的開銷限制了共享磁碟方法的可伸縮性【2】
另一種方法是 **共享磁碟架構shared-disk architecture**,它使用多臺具有獨立處理器和記憶體的機器,但將資料儲存在機器之間共享的磁碟陣列上,這些磁碟透過快速網路連線。這種架構用於某些資料倉庫,但競爭和鎖定的開銷限制了共享磁碟方法的可伸縮性 [^2]
[^ii]: 網路附屬儲存Network Attached Storage, NAS或 **儲存區網路Storage Area Network, SAN**
> [!NOTE]
> 網路附屬儲存Network Attached Storage, NAS或 **儲存區網路Storage Area Network, SAN**
### 無共享架構
相比之下,**無共享架構**【3】shared-nothing architecture有時被稱為 **水平伸縮**,即 horizontal scaling**向外伸縮**,即 scaling out已經相當普及。在這種架構中執行資料庫軟體的每臺機器 / 虛擬機器都稱為 **節點node**。每個節點只使用各自的處理器,記憶體和磁碟。節點之間的任何協調,都是在軟體層面使用傳統網路實現的。
相比之下,**無共享架構** [^3]shared-nothing architecture有時被稱為 **水平伸縮**,即 horizontal scaling**向外伸縮**,即 scaling out已經相當普及。
在這種架構中,執行資料庫軟體的每臺機器 / 虛擬機器都稱為 **節點node**。每個節點只使用各自的處理器,記憶體和磁碟。節點之間的任何協調,都是在軟體層面使用傳統網路實現的。
無共享系統不需要使用特殊的硬體,所以你可以用任意機器 —— 比如價效比最好的機器。你也許可以跨多個地理區域分佈資料從而減少使用者延遲,或者在損失一整個資料中心的情況下倖免於難。隨著雲端虛擬機器部署的出現,即使是小公司,現在無需 Google 級別的運維,也可以實現異地分散式架構。
無共享系統不需要使用特殊的硬體,所以你可以用任意機器 —— 比如價效比最好的機器。你也許可以跨多個地理區域分佈資料從而減少使用者延遲,或者在損失一整個資料中心的情況下倖免於難。
隨著雲端虛擬機器部署的出現,即使是小公司,現在無需 Google 級別的運維,也可以實現異地分散式架構。
在這一部分裡,我們將重點放在無共享架構上。它不見得是所有場景的最佳選擇,但它是最需要你謹慎從事的架構。如果你的資料分佈在多個節點上,你需要意識到這樣一個分散式系統中約束和權衡 —— 資料庫並不能魔術般地把這些東西隱藏起來。
在這一部分裡,我們將重點放在無共享架構上。它不見得是所有場景的最佳選擇,但它是最需要你謹慎從事的架構。
如果你的資料分佈在多個節點上,你需要意識到這樣一個分散式系統中約束和權衡 —— 資料庫並不能魔術般地把這些東西隱藏起來。
雖然分散式無共享架構有許多優點,但它通常也會給應用帶來額外的複雜度,有時也會限制你可用資料模型的表達力。
在某些情況下,一個簡單的單執行緒程式可以比一個擁有超過 100 個 CPU 核的叢集表現得更好 [^4]。另一方面,無共享系統可以非常強大。接下來的幾章,將詳細討論分散式資料會帶來的問題。
雖然分散式無共享架構有許多優點,但它通常也會給應用帶來額外的複雜度,有時也會限制你可用資料模型的表達力。在某些情況下,一個簡單的單執行緒程式可以比一個擁有超過 100 個 CPU 核的叢集表現得更好【4】。另一方面無共享系統可以非常強大。接下來的幾章將詳細討論分散式資料會帶來的問題。
### 複製 vs 分割槽
資料分佈在多個節點上有兩種常見的方式:
* 複製Replication
複製Replication
: 在幾個不同的節點上儲存資料的相同副本,可能放在不同的位置。複製提供了冗餘:如果一些節點不可用,剩餘的節點仍然可以提供資料服務。複製也有助於改善效能。[第六章](/tw/ch6) 將討論複製。
在幾個不同的節點上儲存資料的相同副本,可能放在不同的位置。複製提供了冗餘:如果一些節點不可用,剩餘的節點仍然可以提供資料服務。複製也有助於改善效能。[第五章](/tw/ch5) 將討論複製。
分割槽 (Partitioning)
: 將一個大型資料庫拆分成較小的子集(稱為 **分割槽**,即 partitions從而不同的分割槽可以指派給不同的 **節點**nodes亦稱 **分片**,即 sharding。[第七章](/tw/ch7) 將討論分割槽。
* 分割槽 (Partitioning)
複製和分割槽是不同的機制,但它們經常同時使用。如 [圖 II-1](#fig_replication_partitioning) 所示。
將一個大型資料庫拆分成較小的子集(稱為 **分割槽**,即 partitions從而不同的分割槽可以指派給不同的 **節點**nodes亦稱 **分片**,即 sharding。[第六章](/tw/ch6) 將討論分割槽。
{{< figure src="/fig/ddia_08.png" id="fig_replication_partitioning" caption="圖 II-1 一個數據庫切分為兩個分割槽,每個分割槽都有兩個副本" class="w-full my-4" >}}
複製和分割槽是不同的機制,但它們經常同時使用。如 [圖 II-1](/img/figii-1.png) 所示。
![](/img/figii-1.png)
**圖 II-1 一個數據庫切分為兩個分割槽,每個分割槽都有兩個副本**
理解了這些概念,就可以開始討論在分散式系統中需要做出的困難抉擇。[第七章](/tw/ch7) 將討論 **事務Transaction**,這對於瞭解資料系統中可能出現的各種問題,以及我們可以做些什麼很有幫助。[第八章](/tw/ch8) 和 [第九章](/tw/ch9) 將討論分散式系統的根本侷限性。
理解了這些概念,就可以開始討論在分散式系統中需要做出的困難抉擇。[第八章](/tw/ch8) 將討論 **事務Transaction**,這對於瞭解資料系統中可能出現的各種問題,以及我們可以做些什麼很有幫助。
[第九章](/tw/ch9) 和 [第十章](/tw/ch10) 將討論分散式系統的根本侷限性。
在本書的 [第三部分](/tw/part-iii) 中,將討論如何將多個(可能是分散式的)資料儲存整合為一個更大的系統,以滿足複雜的應用需求。但首先,我們來聊聊分散式的資料。
## 索引
## [6. 複製](/tw/ch6)
- [單主複製](/tw/ch6#sec_replication_leader)
- [複製延遲的問題](/tw/ch6#sec_replication_lag)
- [多主複製](/tw/ch6#sec_replication_multi_leader)
- [無主複製](/tw/ch6#sec_replication_leaderless)
- [總結](/tw/ch6#summary)
* [第五章:複製](/tw/ch5)
* [領導者與追隨者](/tw/ch5#領導者與追隨者)
* [複製延遲問題](/tw/ch5#複製延遲問題)
* [多主複製](/tw/ch5#多主複製)
* [無主複製](/tw/ch5#無主複製)
* [本章小結](/tw/ch5#本章小結)
* [第六章:分割槽](/tw/ch6)
* [分割槽與複製](/tw/ch6#分割槽與複製)
* [鍵值資料的分割槽](/tw/ch6#鍵值資料的分割槽)
* [分割槽與次級索引](/tw/ch6#分割槽與次級索引)
* [分割槽再平衡](/tw/ch6#分割槽再平衡)
* [請求路由](/tw/ch6#請求路由)
* [本章小結](/tw/ch6#本章小結)
* [第七章:事務](/tw/ch7)
* [事務的棘手概念](/tw/ch7#事務的棘手概念)
* [弱隔離級別](/tw/ch7#弱隔離級別)
* [可序列化](/tw/ch7#可序列化)
* [本章小結](/tw/ch7#本章小結)
* [第八章:分散式系統的麻煩](/tw/ch8)
* [故障與部分失效](/tw/ch8#故障與部分失效)
* [不可靠的網路](/tw/ch8#不可靠的網路)
* [不可靠的時鐘](/tw/ch8#不可靠的時鐘)
* [知識、真相與謊言](/tw/ch8#知識真相與謊言)
* [本章小結](/tw/ch8#本章小結)
* [第九章:一致性與共識](/tw/ch9)
* [一致性保證](/tw/ch9#一致性保證)
* [線性一致性](/tw/ch9#線性一致性)
* [順序保證](/tw/ch9#順序保證)
* [分散式事務與共識](/tw/ch9#分散式事務與共識)
* [本章小結](/tw/ch9#本章小結)
## [7. 分片](/tw/ch7)
- [分片的利與弊](/tw/ch7#sec_sharding_reasons)
- [鍵值資料的分片](/tw/ch7#sec_sharding_key_value)
- [請求路由](/tw/ch7#sec_sharding_routing)
- [分片與二級索引](/tw/ch7#sec_sharding_secondary_indexes)
- [總結](/tw/ch7#summary)
## [8. 事務](/tw/ch8)
- [事務到底是什麼?](/tw/ch8#sec_transactions_overview)
- [弱隔離級別](/tw/ch8#sec_transactions_isolation_levels)
- [可序列化](/tw/ch8#sec_transactions_serializability)
- [分散式事務](/tw/ch8#sec_transactions_distributed)
- [總結](/tw/ch8#summary)
- [參考](/tw/ch8#參考)
## [9. 分散式系統的麻煩](/tw/ch9)
- [故障與部分失效](/tw/ch9#sec_distributed_partial_failure)
- [不可靠的網路](/tw/ch9#sec_distributed_networks)
- [不可靠的時鐘](/tw/ch9#sec_distributed_clocks)
- [知識、真相和謊言](/tw/ch9#sec_distributed_truth)
- [總結](/tw/ch9#summary)
## [10. 一致性與共識](/tw/ch10)
- [線性一致性](/tw/ch10#sec_consistency_linearizability)
- [ID 生成器和邏輯時鐘](/tw/ch10#sec_consistency_logical)
- [共識](/tw/ch10#sec_consistency_consensus)
- [總結](/tw/ch10#summary)
## 參考文獻
### 參考
1. Ulrich Drepper: “[What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf),” akkadia.org, November 21, 2007.
1. Ben Stopford: “[Shared Nothing vs. Shared Disk Architectures: An Independent View](http://www.benstopford.com/2009/11/24/understanding-the-shared-nothing-architecture/),” benstopford.com, November 24, 2009.
1. Michael Stonebraker: “[The Case for Shared Nothing](http://db.cs.berkeley.edu/papers/hpts85-nothing.pdf),” IEEE Database EngineeringBulletin, volume 9, number 1, pages 49, March 1986.
1. Frank McSherry, Michael Isard, and Derek G. Murray: “[Scalability! But at What COST?](http://www.frankmcsherry.org/assets/COST.pdf),” at 15th USENIX Workshop on Hot Topics in Operating Systems (HotOS),May 2015.
[^1]: Ulrich Drepper: “[What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf),” akkadia.org, November 21, 2007.
[^2]: Ben Stopford: “[Shared Nothing vs. Shared Disk Architectures: An Independent View](http://www.benstopford.com/2009/11/24/understanding-the-shared-nothing-architecture/),” benstopford.com, November 24, 2009.
[^3]: Michael Stonebraker: “[The Case for Shared Nothing](http://db.cs.berkeley.edu/papers/hpts85-nothing.pdf),” IEEE Database EngineeringBulletin, volume 9, number 1, pages 49, March 1986.
[^4]: Frank McSherry, Michael Isard, and Derek G. Murray: “[Scalability! But at What COST?](http://www.frankmcsherry.org/assets/COST.pdf),” at 15th USENIX Workshop on Hot Topics in Operating Systems (HotOS),May 2015.

View file

@ -18,13 +18,13 @@ breadcrumbs: false
從高層次上看,儲存和處理資料的系統可以分為兩大類:
* 記錄系統System of record
權威記錄系統System of record
: **記錄系統**,也被稱為 **真相源source of truth**,持有資料的權威版本。當新的資料進入時(例如,使用者輸入)首先會記錄在這裡。
每個事實正正好好表示一次(表示通常是 **正規化的**,即 normalized。如果其他系統和 **記錄系統** 之間存在任何差異,那麼記錄系統中的值是正確的(根據定義)。
**記錄系統**,也被稱為 **真相源source of truth**,持有資料的權威版本。當新的資料進入時(例如,使用者輸入)首先會記錄在這裡。每個事實正正好好表示一次(表示通常是 **正規化的**,即 normalized。如果其他系統和 **記錄系統** 之間存在任何差異,那麼記錄系統中的值是正確的(根據定義)。
* 派生資料系統Derived data systems
**派生系統** 中的資料,通常是另一個系統中的現有資料以某種方式進行轉換或處理的結果。如果丟失派生資料,可以從原始來源重新建立。典型的例子是 **快取cache**:如果資料在快取中,就可以由快取提供服務;如果快取不包含所需資料,則降級由底層資料庫提供。非規範化的值,索引和物化檢視亦屬此類。在推薦系統中,預測彙總資料通常衍生自使用者日誌。
派生資料系統Derived data systems
: **派生系統** 中的資料,通常是另一個系統中的現有資料以某種方式進行轉換或處理的結果。如果丟失派生資料,可以從原始來源重新建立。
典型的例子是 **快取cache**:如果資料在快取中,就可以由快取提供服務;如果快取不包含所需資料,則降級由底層資料庫提供。非規範化的值,索引和物化檢視亦屬此類。在推薦系統中,預測彙總資料通常衍生自使用者日誌。
從技術上講,派生資料是 **冗餘的redundant**,因為它重複了已有的資訊。但是派生資料對於獲得良好的只讀查詢效能通常是至關重要的。它通常是非規範化的。可以從單個源頭衍生出多個不同的資料集,使你能從不同的 “視角” 洞察資料。
@ -39,21 +39,25 @@ breadcrumbs: false
我們將從 [第十一章](/tw/ch11) 開始,研究例如 MapReduce 這樣 **面向批處理batch-oriented** 的資料流系統。對於建設大規模資料系統,我們將看到,它們提供了優秀的工具和思想。
[第十二章](/tw/ch12) 將把這些思想應用到 **流式資料data streams** 中,使我們能用更低的延遲完成同樣的任務。[第十三章](/ch13) 將對本書進行總結,探討如何使用這些工具來構建可靠,可伸縮和可維護的應用。
## 索引
* [第十章:批處理](/tw/ch11)
* [使用Unix工具的批處理](/tw/ch11#使用Unix工具的批處理)
* [MapReduce和分散式檔案系統](/tw/ch11#MapReduce和分散式檔案系統)
* [MapReduce之後](/tw/ch11#MapReduce之後)
* [本章小結](/tw/ch11#本章小結)
* [第十一章:流處理](/tw/ch12)
* [傳遞事件流](/tw/ch12#傳遞事件流)
* [資料庫與流](/tw/ch12#資料庫與流)
* [流處理](/tw/ch12#流處理)
* [本章小結](/tw/ch12#本章小結)
* [第十三章:做正確的事](/ch13)
* [資料整合](/ch13#資料整合)
* [分拆資料庫](/ch13#分拆資料庫)
* [將事情做正確](/ch13#將事情做正確)
* [做正確的事情](/ch13#做正確的事情)
* [本章小結](/ch13#本章小結)
## [第十一章:批處理](/tw/ch11)
- [使用Unix工具的批處理](/tw/ch11#使用unix工具的批處理)
- [MapReduce和分散式檔案系統](/tw/ch11#mapreduce和分散式檔案系統)
- [MapReduce之後](/tw/ch11#mapreduce之後)
- [本章小結](/tw/ch11#本章小結)
- [參考文獻](/tw/ch11#參考文獻)
## [第十二章:流處理](/tw/ch12)
- [傳遞事件流](/tw/ch12#傳遞事件流)
- [資料庫與流](/tw/ch12#資料庫與流)
- [流處理](/tw/ch12#流處理)
- [本章小結](/tw/ch12#本章小結)
- [參考文獻](/tw/ch12#參考文獻)
## [第十三章:資料系統的未來](/ch13)
- [資料整合](/ch13#資料整合)
- [分拆資料庫](/ch13#分拆資料庫)
- [將事情做正確](/ch13#將事情做正確)
- [做正確的事情](/ch13#做正確的事情)
- [本章小結](/ch13#本章小結)
- [參考文獻](/ch13#參考文獻)

View file

@ -11,16 +11,25 @@ breadcrumbs: false
## [序言](/tw/preface)
- [本書的目標讀者](/tw/preface#本書的目標讀者)
- [本書涉及的領域](/tw/preface#本書涉及的領域)
- [本書綱要](/tw/preface#本書綱要)
- [參考文獻與延伸閱讀](/tw/preface#參考文獻與延伸閱讀)
- [OReilly Safari](/tw/preface#oreilly-safari)
- [致謝](/tw/preface#致謝)
## [1. 資料系統架構中的權衡](/tw/ch1)
- [分析型與事務型系統](/tw/ch1#sec_introduction_analytics)
- [事務處理與分析的特徵](/tw/ch1#sec_introduction_oltp)
- [資料倉庫](/tw/ch1#sec_introduction_dwh)
- [從資料倉庫到資料湖](/tw/ch1#from-data-warehouse-to-data-lake)
- [超越資料湖](/tw/ch1#beyond-the-data-lake)
- [權威資料來源與派生資料](/tw/ch1#sec_introduction_derived)
- [雲服務與自託管](/tw/ch1#sec_introduction_cloud)
- [雲服務的利弊](/tw/ch1#sec_introduction_cloud_tradeoffs)
- [雲原生系統架構](/tw/ch1#sec_introduction_cloud_native)
- [雲服務的分層](/tw/ch1#layering-of-cloud-services)
- [儲存與計算的分離](/tw/ch1#sec_introduction_storage_compute)
- [雲時代的運維](/tw/ch1#sec_introduction_operations)
- [分散式與單節點系統](/tw/ch1#sec_introduction_distributed)
- [分散式系統的問題](/tw/ch1#sec_introduction_dist_sys_problems)
@ -28,10 +37,9 @@ breadcrumbs: false
- [雲計算與超級計算](/tw/ch1#id17)
- [資料系統、法律與社會](/tw/ch1#sec_introduction_compliance)
- [總結](/tw/ch1#summary)
- [參考](/tw/ch1#參考)
## [2. 定義非功能性需求](/tw/ch2)
- [案例研究:社交網路首頁時間線](/tw/ch2#sec_introduction_twitter)
- [表示使用者、帖子與關注關係](/tw/ch2#id20)
- [時間線的物化與更新](/tw/ch2#sec_introduction_materializing)
@ -42,80 +50,123 @@ breadcrumbs: false
- [可靠性與容錯](/tw/ch2#sec_introduction_reliability)
- [容錯](/tw/ch2#id27)
- [硬體與軟體故障](/tw/ch2#sec_introduction_hardware_faults)
- [透過冗餘容忍硬體故障](/tw/ch2#tolerating-hardware-faults-through-redundancy)
- [軟體故障](/tw/ch2#software-faults)
- [人類與可靠性](/tw/ch2#id31)
- [可伸縮性](/tw/ch2#sec_introduction_scalability)
- [描述負載](/tw/ch2#id33)
- [共享記憶體、共享磁碟與無共享架構](/tw/ch2#sec_introduction_shared_nothing)
- [可伸縮性原則](/tw/ch2#id35)
- [性](/tw/ch2#sec_introduction_maintainability)
- [操作性:讓運維更輕鬆](/tw/ch2#id37)
- [維性](/tw/ch2#sec_introduction_maintainability)
- [運維性:讓運維更輕鬆](/tw/ch2#id37)
- [簡單性:管理複雜度](/tw/ch2#id38)
- [可演化性:讓變化更容易](/tw/ch2#sec_introduction_evolvability)
- [總結](/tw/ch2#summary)
- [參考](/tw/ch2#參考)
## [3. 資料模型與查詢語言](/tw/ch3)
- [關係模型與文件模型](/tw/ch3#sec_datamodels_history)
- [物件關係不匹配](/tw/ch3#sec_datamodels_document)
- [物件關係對映ORM](/tw/ch3#object-relational-mapping-orm)
- [用於一對多關係的文件資料模型](/tw/ch3#the-document-data-model-for-one-to-many-relationships)
- [規範化、反規範化與連線](/tw/ch3#sec_datamodels_normalization)
- [規範化的權衡](/tw/ch3#trade-offs-of-normalization)
- [社交網路案例研究中的反規範化](/tw/ch3#denormalization-in-the-social-networking-case-study)
- [多對一與多對多關係](/tw/ch3#sec_datamodels_many_to_many)
- [星型與雪花型:分析模式](/tw/ch3#sec_datamodels_analytics)
- [何時使用哪種模型](/tw/ch3#sec_datamodels_document_summary)
- [文件模型中的模式靈活性](/tw/ch3#sec_datamodels_schema_flexibility)
- [讀寫的資料區域性](/tw/ch3#sec_datamodels_document_locality)
- [文件的查詢語言](/tw/ch3#query-languages-for-documents)
- [文件和關係資料庫的融合](/tw/ch3#convergence-of-document-and-relational-databases)
- [圖資料模型](/tw/ch3#sec_datamodels_graph)
- [屬性圖](/tw/ch3#id56)
- [Cypher 查詢語言](/tw/ch3#id57)
- [SQL 中的圖查詢](/tw/ch3#id58)
- [三元組儲存與 SPARQL](/tw/ch3#id59)
- [RDF 資料模型](/tw/ch3#the-rdf-data-model)
- [SPARQL 查詢語言](/tw/ch3#the-sparql-query-language)
- [Datalog遞迴關係查詢](/tw/ch3#id62)
- [GraphQL](/tw/ch3#id63)
- [事件溯源與 CQRS](/tw/ch3#sec_datamodels_events)
- [資料框、矩陣與陣列](/tw/ch3#sec_datamodels_dataframes)
- [總結](/tw/ch3#summary)
- [參考](/tw/ch3#參考)
## [4. 儲存與檢索](/tw/ch4)
- [OLTP 系統的儲存與索引](/tw/ch4#sec_storage_oltp)
- [日誌結構儲存](/tw/ch4#sec_storage_log_structured)
- [SSTable 檔案格式](/tw/ch4#the-sstable-file-format)
- [構建和合並 SSTable](/tw/ch4#constructing-and-merging-sstables)
- [布隆過濾器](/tw/ch4#bloom-filters)
- [壓實策略](/tw/ch4#sec_storage_lsm_compaction)
- [B 樹](/tw/ch4#sec_storage_b_trees)
- [使 B 樹可靠](/tw/ch4#sec_storage_btree_wal)
- [B 樹變體](/tw/ch4#b-tree-variants)
- [比較 B 樹與 LSM 樹](/tw/ch4#sec_storage_btree_lsm_comparison)
- [讀取效能](/tw/ch4#read-performance)
- [順序與隨機寫入](/tw/ch4#sidebar_sequential)
- [寫放大](/tw/ch4#write-amplification)
- [磁碟空間使用](/tw/ch4#disk-space-usage)
- [多列索引與二級索引](/tw/ch4#sec_storage_index_multicolumn)
- [在索引中儲存值](/tw/ch4#sec_storage_index_heap)
- [全記憶體儲存](/tw/ch4#sec_storage_inmemory)
- [分析型資料儲存](/tw/ch4#sec_storage_analytics)
- [雲資料倉庫](/tw/ch4#sec_cloud_data_warehouses)
- [列式儲存](/tw/ch4#sec_storage_column)
- [列壓縮](/tw/ch4#sec_storage_column_compression)
- [列儲存中的排序順序](/tw/ch4#sort-order-in-column-storage)
- [寫入列式儲存](/tw/ch4#writing-to-column-oriented-storage)
- [查詢執行:編譯與向量化](/tw/ch4#sec_storage_vectorized)
- [物化檢視與多維資料集](/tw/ch4#sec_storage_materialized_views)
- [多維索引與全文索引](/tw/ch4#sec_storage_multidimensional)
- [全文檢索](/tw/ch4#sec_storage_full_text)
- [向量嵌入](/tw/ch4#id92)
- [總結](/tw/ch4#summary)
- [參考](/tw/ch4#參考)
## [5. 編碼與演化](/tw/ch5)
- [編碼資料的格式](/tw/ch5#sec_encoding_formats)
- [特定語言的格式](/tw/ch5#id96)
- [JSON、XML 及其二進位制變體](/tw/ch5#sec_encoding_json)
- [JSON 模式](/tw/ch5#json-schema)
- [二進位制編碼](/tw/ch5#binary-encoding)
- [Protocol Buffers](/tw/ch5#sec_encoding_protobuf)
- [欄位標籤與模式演化](/tw/ch5#field-tags-and-schema-evolution)
- [Avro](/tw/ch5#sec_encoding_avro)
- [寫入者模式與讀取者模式](/tw/ch5#the-writers-schema-and-the-readers-schema)
- [模式演化規則](/tw/ch5#schema-evolution-rules)
- [但什麼是寫入者模式?](/tw/ch5#but-what-is-the-writers-schema)
- [動態生成的模式](/tw/ch5#dynamically-generated-schemas)
- [模式的優點](/tw/ch5#sec_encoding_schemas)
- [資料流的模式](/tw/ch5#sec_encoding_dataflow)
- [流經資料庫的資料流](/tw/ch5#sec_encoding_dataflow_db)
- [不同時間寫入的不同值](/tw/ch5#different-values-written-at-different-times)
- [歸檔儲存](/tw/ch5#archival-storage)
- [流經服務的資料流REST 與 RPC](/tw/ch5#sec_encoding_dataflow_rpc)
- [Web 服務](/tw/ch5#sec_web_services)
- [遠端過程呼叫RPC的問題](/tw/ch5#sec_problems_with_rpc)
- [負載均衡器、服務發現和服務網格](/tw/ch5#sec_encoding_service_discovery)
- [RPC 的資料編碼與演化](/tw/ch5#data-encoding-and-evolution-for-rpc)
- [持久化執行與工作流](/tw/ch5#sec_encoding_dataflow_workflows)
- [持久化執行](/tw/ch5#durable-execution)
- [事件驅動的架構](/tw/ch5#sec_encoding_dataflow_msg)
- [訊息代理](/tw/ch5#message-brokers)
- [分散式 actor 框架](/tw/ch5#distributed-actor-frameworks)
- [總結](/tw/ch5#summary)
- [參考](/tw/ch5#參考)
## [6. 複製](/tw/ch6)
- [單主複製](/tw/ch6#sec_replication_leader)
- [同步複製與非同步複製](/tw/ch6#sec_replication_sync_async)
- [設定新的副本](/tw/ch6#sec_replication_new_replica)
- [處理節點故障](/tw/ch6#sec_replication_failover)
- [從節點故障:追趕恢復](/tw/ch6#follower-failure-catch-up-recovery)
- [領導者故障:故障轉移](/tw/ch6#leader-failure-failover)
- [複製日誌的實現](/tw/ch6#sec_replication_implementation)
- [基於語句的複製](/tw/ch6#statement-based-replication)
- [預寫日誌WAL傳輸](/tw/ch6#write-ahead-log-wal-shipping)
- [邏輯(基於行)日誌複製](/tw/ch6#logical-row-based-log-replication)
- [複製延遲的問題](/tw/ch6#sec_replication_lag)
- [讀己之寫](/tw/ch6#sec_replication_ryw)
- [單調讀](/tw/ch6#sec_replication_monotonic_reads)
@ -123,24 +174,44 @@ breadcrumbs: false
- [複製延遲的解決方案](/tw/ch6#id131)
- [多主複製](/tw/ch6#sec_replication_multi_leader)
- [跨地域執行](/tw/ch6#sec_replication_multi_dc)
- [多主複製拓撲](/tw/ch6#sec_replication_topologies)
- [不同拓撲的問題](/tw/ch6#problems-with-different-topologies)
- [同步引擎與本地優先軟體](/tw/ch6#sec_replication_offline_clients)
- [即時協作、離線優先和本地優先應用](/tw/ch6#real-time-collaboration-offline-first-and-local-first-apps)
- [同步引擎的利弊](/tw/ch6#pros-and-cons-of-sync-engines)
- [處理寫入衝突](/tw/ch6#sec_replication_write_conflicts)
- [衝突避免](/tw/ch6#conflict-avoidance)
- [最後寫入者勝(丟棄併發寫入)](/tw/ch6#sec_replication_lww)
- [手動衝突解決](/tw/ch6#manual-conflict-resolution)
- [自動衝突解決](/tw/ch6#automatic-conflict-resolution)
- [CRDT 與操作變換](/tw/ch6#sec_replication_crdts)
- [什麼是衝突?](/tw/ch6#what-is-a-conflict)
- [無主複製](/tw/ch6#sec_replication_leaderless)
- [當節點故障時寫入資料庫](/tw/ch6#id287)
- [追趕錯過的寫入](/tw/ch6#sec_replication_read_repair)
- [讀寫仲裁](/tw/ch6#sec_replication_quorum_condition)
- [仲裁一致性的侷限](/tw/ch6#sec_replication_quorum_limitations)
- [監控陳舊性](/tw/ch6#monitoring-staleness)
- [單主與無主複製的效能](/tw/ch6#sec_replication_leaderless_perf)
- [多地區操作](/tw/ch6#multi-region-operation)
- [檢測併發寫入](/tw/ch6#sec_replication_concurrent)
- ["先發生"關係與併發](/tw/ch6#sec_replication_happens_before)
- [捕獲先發生關係](/tw/ch6#capturing-the-happens-before-relationship)
- [版本向量](/tw/ch6#version-vectors)
- [總結](/tw/ch6#summary)
- [參考](/tw/ch6#參考)
## [7. 分片](/tw/ch7)
- [分片的利與弊](/tw/ch7#sec_sharding_reasons)
- [面向多租戶的分片](/tw/ch7#sec_sharding_multitenancy)
- [鍵值資料的分片](/tw/ch7#sec_sharding_key_value)
- [按鍵的範圍分片](/tw/ch7#sec_sharding_key_range)
- [重新平衡鍵範圍分片資料](/tw/ch7#rebalancing-key-range-sharded-data)
- [按鍵的雜湊分片](/tw/ch7#sec_sharding_hash)
- [雜湊取模節點數](/tw/ch7#hash-modulo-number-of-nodes)
- [固定數量的分片](/tw/ch7#fixed-number-of-shards)
- [按雜湊範圍分片](/tw/ch7#sharding-by-hash-range)
- [一致性雜湊](/tw/ch7#sec_sharding_consistent_hashing)
- [傾斜的工作負載與緩解熱點](/tw/ch7#sec_sharding_skew)
- [運維:自動/手動再均衡](/tw/ch7#sec_sharding_operations)
- [請求路由](/tw/ch7#sec_sharding_routing)
@ -148,71 +219,321 @@ breadcrumbs: false
- [本地二級索引](/tw/ch7#id166)
- [全域性二級索引](/tw/ch7#id167)
- [總結](/tw/ch7#summary)
- [References](/tw/ch7#references)
## [8. 事務](/tw/ch8)
- [事務到底是什麼?](/tw/ch8#sec_transactions_overview)
- [ACID 的含義](/tw/ch8#sec_transactions_acid)
- [原子性](/tw/ch8#sec_transactions_acid_atomicity)
- [一致性](/tw/ch8#sec_transactions_acid_consistency)
- [隔離性](/tw/ch8#sec_transactions_acid_isolation)
- [永續性](/tw/ch8#durability)
- [單物件與多物件操作](/tw/ch8#sec_transactions_multi_object)
- [單物件寫入](/tw/ch8#sec_transactions_single_object)
- [多物件事務的需求](/tw/ch8#sec_transactions_need)
- [處理錯誤和中止](/tw/ch8#handling-errors-and-aborts)
- [弱隔離級別](/tw/ch8#sec_transactions_isolation_levels)
- [讀已提交](/tw/ch8#sec_transactions_read_committed)
- [沒有髒讀](/tw/ch8#no-dirty-reads)
- [沒有髒寫](/tw/ch8#sec_transactions_dirty_write)
- [實現讀已提交](/tw/ch8#sec_transactions_read_committed_impl)
- [快照隔離與可重複讀](/tw/ch8#sec_transactions_snapshot_isolation)
- [多版本併發控制MVCC](/tw/ch8#sec_transactions_snapshot_impl)
- [觀察一致快照的可見性規則](/tw/ch8#sec_transactions_mvcc_visibility)
- [索引與快照隔離](/tw/ch8#indexes-and-snapshot-isolation)
- [快照隔離、可重複讀和命名混淆](/tw/ch8#snapshot-isolation-repeatable-read-and-naming-confusion)
- [防止丟失更新](/tw/ch8#sec_transactions_lost_update)
- [原子寫操作](/tw/ch8#atomic-write-operations)
- [顯式鎖定](/tw/ch8#explicit-locking)
- [自動檢測丟失的更新](/tw/ch8#automatically-detecting-lost-updates)
- [條件寫入(比較並設定)](/tw/ch8#sec_transactions_compare_and_set)
- [衝突解決與複製](/tw/ch8#conflict-resolution-and-replication)
- [寫偏斜與幻讀](/tw/ch8#sec_transactions_write_skew)
- [描述寫偏斜](/tw/ch8#characterizing-write-skew)
- [更多寫偏斜的例子](/tw/ch8#more-examples-of-write-skew)
- [導致寫偏斜的幻讀](/tw/ch8#sec_transactions_phantom)
- [物化衝突](/tw/ch8#materializing-conflicts)
- [可序列化](/tw/ch8#sec_transactions_serializability)
- [實際序列執行](/tw/ch8#sec_transactions_serial)
- [將事務封裝在儲存過程中](/tw/ch8#encapsulating-transactions-in-stored-procedures)
- [儲存過程的利弊](/tw/ch8#sec_transactions_stored_proc_tradeoffs)
- [分片](/tw/ch8#sharding)
- [序列執行總結](/tw/ch8#summary-of-serial-execution)
- [兩階段鎖定2PL](/tw/ch8#sec_transactions_2pl)
- [兩階段鎖定的實現](/tw/ch8#implementation-of-two-phase-locking)
- [兩階段鎖定的效能](/tw/ch8#performance-of-two-phase-locking)
- [謂詞鎖](/tw/ch8#predicate-locks)
- [索引範圍鎖](/tw/ch8#sec_transactions_2pl_range)
- [可序列化快照隔離SSI](/tw/ch8#sec_transactions_ssi)
- [悲觀併發控制與樂觀併發控制](/tw/ch8#pessimistic-versus-optimistic-concurrency-control)
- [基於過時前提的決策](/tw/ch8#decisions-based-on-an-outdated-premise)
- [檢測陳舊的 MVCC 讀取](/tw/ch8#detecting-stale-mvcc-reads)
- [檢測影響先前讀取的寫入](/tw/ch8#sec_detecting_writes_affect_reads)
- [可序列化快照隔離的效能](/tw/ch8#performance-of-serializable-snapshot-isolation)
- [分散式事務](/tw/ch8#sec_transactions_distributed)
- [兩階段提交2PC](/tw/ch8#sec_transactions_2pc)
- [系統性的承諾](/tw/ch8#a-system-of-promises)
- [協調器故障](/tw/ch8#coordinator-failure)
- [三階段提交](/tw/ch8#three-phase-commit)
- [跨不同系統的分散式事務](/tw/ch8#sec_transactions_xa)
- [精確一次訊息處理](/tw/ch8#sec_transactions_exactly_once)
- [XA 事務](/tw/ch8#xa-transactions)
- [存疑時持有鎖](/tw/ch8#holding-locks-while-in-doubt)
- [從協調器故障中恢復](/tw/ch8#recovering-from-coordinator-failure)
- [XA 事務的問題](/tw/ch8#problems-with-xa-transactions)
- [資料庫內部的分散式事務](/tw/ch8#sec_transactions_internal)
- [再談精確一次訊息處理](/tw/ch8#exactly-once-message-processing-revisited)
- [總結](/tw/ch8#summary)
- [參考](/tw/ch8#參考)
## [9. 分散式系統的麻煩](/tw/ch9)
- [故障與部分失效](/tw/ch9#sec_distributed_partial_failure)
- [不可靠的網路](/tw/ch9#sec_distributed_networks)
- [TCP 的侷限性](/tw/ch9#sec_distributed_tcp)
- [實踐中的網路故障](/tw/ch9#sec_distributed_network_faults)
- [故障檢測](/tw/ch9#id307)
- [超時與無界延遲](/tw/ch9#sec_distributed_queueing)
- [同步網路與非同步網路](/tw/ch9#sec_distributed_sync_networks)
- [網路故障的實踐](/tw/ch9#sec_distributed_network_faults)
- [檢測故障](/tw/ch9#id307)
- [超時和無界延遲](/tw/ch9#sec_distributed_queueing)
- [網路擁塞和排隊](/tw/ch9#network-congestion-and-queueing)
- [同步與非同步網路](/tw/ch9#sec_distributed_sync_networks)
- [我們不能簡單地使網路延遲可預測嗎?](/tw/ch9#can-we-not-simply-make-network-delays-predictable)
- [不可靠的時鐘](/tw/ch9#sec_distributed_clocks)
- [單調時鐘與日曆時鐘](/tw/ch9#sec_distributed_monotonic_timeofday)
- [時鐘同步與準確性](/tw/ch9#sec_distributed_clock_accuracy)
- [日曆時鐘](/tw/ch9#time-of-day-clocks)
- [單調時鐘](/tw/ch9#monotonic-clocks)
- [時鐘同步和準確性](/tw/ch9#sec_distributed_clock_accuracy)
- [對同步時鐘的依賴](/tw/ch9#sec_distributed_clocks_relying)
- [用於事件排序的時間戳](/tw/ch9#sec_distributed_lww)
- [帶置信區間的時鐘讀數](/tw/ch9#clock-readings-with-a-confidence-interval)
- [用於全域性快照的同步時鐘](/tw/ch9#sec_distributed_spanner)
- [程序暫停](/tw/ch9#sec_distributed_clocks_pauses)
- [知識、真相與謊言](/tw/ch9#sec_distributed_truth)
- [響應時間保證](/tw/ch9#sec_distributed_clocks_realtime)
- [限制垃圾回收的影響](/tw/ch9#sec_distributed_gc_impact)
- [知識、真相和謊言](/tw/ch9#sec_distributed_truth)
- [多數派原則](/tw/ch9#sec_distributed_majority)
- [分散式鎖與租約](/tw/ch9#sec_distributed_lock_fencing)
- [分散式鎖和租約](/tw/ch9#sec_distributed_lock_fencing)
- [隔離殭屍程序和延遲請求](/tw/ch9#sec_distributed_fencing_tokens)
- [多副本隔離](/tw/ch9#fencing-with-multiple-replicas)
- [拜占庭故障](/tw/ch9#sec_distributed_byzantine)
- [弱形式的謊言](/tw/ch9#weak-forms-of-lying)
- [系統模型與現實](/tw/ch9#sec_distributed_system_model)
- [形式化方法與隨機測試](/tw/ch9#sec_distributed_formal)
- [定義演算法的正確性](/tw/ch9#defining-the-correctness-of-an-algorithm)
- [安全性與活性](/tw/ch9#sec_distributed_safety_liveness)
- [將系統模型對映到現實世界](/tw/ch9#mapping-system-models-to-the-real-world)
- [形式化方法和隨機測試](/tw/ch9#sec_distributed_formal)
- [模型檢查與規範語言](/tw/ch9#model-checking-and-specification-languages)
- [故障注入](/tw/ch9#sec_fault_injection)
- [確定性模擬測試](/tw/ch9#deterministic-simulation-testing)
- [總結](/tw/ch9#summary)
- [參考](/tw/ch9#參考)
## [10. 一致性與共識](/tw/ch10)
- [線性一致性](/tw/ch10#sec_consistency_linearizability)
- [什麼使系統具有線性一致性?](/tw/ch10#sec_consistency_lin_definition)
- [依賴線性一致性](/tw/ch10#sec_consistency_linearizability_usage)
- [鎖定與領導者選舉](/tw/ch10#locking-and-leader-election)
- [約束與唯一性保證](/tw/ch10#sec_consistency_uniqueness)
- [跨通道時序依賴](/tw/ch10#cross-channel-timing-dependencies)
- [實現線性一致性系統](/tw/ch10#sec_consistency_implementing_linearizable)
- [線性一致性與仲裁](/tw/ch10#sec_consistency_quorum_linearizable)
- [線性一致性的代價](/tw/ch10#sec_linearizability_cost)
- [ID 生成器與邏輯時鐘](/tw/ch10#sec_consistency_logical)
- [CAP 定理](/tw/ch10#the-cap-theorem)
- [線性一致性與網路延遲](/tw/ch10#linearizability-and-network-delays)
- [ID 生成器和邏輯時鐘](/tw/ch10#sec_consistency_logical)
- [邏輯時鐘](/tw/ch10#sec_consistency_timestamps)
- [Lamport 時間戳](/tw/ch10#lamport-timestamps)
- [混合邏輯時鐘](/tw/ch10#hybrid-logical-clocks)
- [Lamport/混合邏輯時鐘 vs. 向量時鐘](/tw/ch10#lamporthybrid-logical-clocks-vs-vector-clocks)
- [線性一致的 ID 生成器](/tw/ch10#sec_consistency_linearizable_id)
- [實現線性一致的 ID 生成器](/tw/ch10#implementing-a-linearizable-id-generator)
- [使用邏輯時鐘強制約束](/tw/ch10#enforcing-constraints-using-logical-clocks)
- [共識](/tw/ch10#sec_consistency_consensus)
- [共識的多面性](/tw/ch10#sec_consistency_faces)
- [單值共識](/tw/ch10#single-value-consensus)
- [比較並設定作為共識](/tw/ch10#compare-and-set-as-consensus)
- [共享日誌作為共識](/tw/ch10#sec_consistency_shared_logs)
- [獲取並增加作為共識](/tw/ch10#fetch-and-add-as-consensus)
- [原子提交作為共識](/tw/ch10#atomic-commitment-as-consensus)
- [共識的實踐](/tw/ch10#sec_consistency_total_order)
- [協調服務](/tw/ch10#sec_consistency_coordination)
- [使用共享日誌](/tw/ch10#sec_consistency_smr)
- [從單主複製到共識](/tw/ch10#from-single-leader-replication-to-consensus)
- [共識的微妙之處](/tw/ch10#subtleties-of-consensus)
- [共識的利弊](/tw/ch10#pros-and-cons-of-consensus)
- [總結](/tw/ch10#summary)
- [參考文獻](/tw/ch10#參考文獻)
## [第十一章:批處理](/tw/ch11)
- [使用Unix工具的批處理](/tw/ch11#使用unix工具的批處理)
- [簡單日誌分析](/tw/ch11#簡單日誌分析)
- [命令鏈與自定義程式](/tw/ch11#命令鏈與自定義程式)
- [排序 VS 記憶體中的聚合](/tw/ch11#排序-vs-記憶體中的聚合)
- [Unix哲學](/tw/ch11#unix哲學)
- [統一的介面](/tw/ch11#統一的介面)
- [邏輯與佈線相分離](/tw/ch11#邏輯與佈線相分離)
- [透明度和實驗](/tw/ch11#透明度和實驗)
- [MapReduce和分散式檔案系統](/tw/ch11#mapreduce和分散式檔案系統)
- [MapReduce作業執行](/tw/ch11#mapreduce作業執行)
- [分散式執行MapReduce](/tw/ch11#分散式執行mapreduce)
- [MapReduce工作流](/tw/ch11#mapreduce工作流)
- [Reduce側連線與分組](/tw/ch11#reduce側連線與分組)
- [示例:使用者活動事件分析](/tw/ch11#示例使用者活動事件分析)
- [排序合併連線](/tw/ch11#排序合併連線)
- [把相關資料放在一起](/tw/ch11#把相關資料放在一起)
- [分組](/tw/ch11#分組)
- [處理偏斜](/tw/ch11#處理偏斜)
- [Map側連線](/tw/ch11#map側連線)
- [廣播雜湊連線](/tw/ch11#廣播雜湊連線)
- [分割槽雜湊連線](/tw/ch11#分割槽雜湊連線)
- [Map側合併連線](/tw/ch11#map側合併連線)
- [MapReduce工作流與Map側連線](/tw/ch11#mapreduce工作流與map側連線)
- [批處理工作流的輸出](/tw/ch11#批處理工作流的輸出)
- [建立搜尋索引](/tw/ch11#建立搜尋索引)
- [鍵值儲存作為批處理輸出](/tw/ch11#鍵值儲存作為批處理輸出)
- [批處理輸出的哲學](/tw/ch11#批處理輸出的哲學)
- [Hadoop與分散式資料庫的對比](/tw/ch11#hadoop與分散式資料庫的對比)
- [儲存多樣性](/tw/ch11#儲存多樣性)
- [處理模型的多樣性](/tw/ch11#處理模型的多樣性)
- [針對頻繁故障設計](/tw/ch11#針對頻繁故障設計)
- [MapReduce之後](/tw/ch11#mapreduce之後)
- [物化中間狀態](/tw/ch11#物化中間狀態)
- [資料流引擎](/tw/ch11#資料流引擎)
- [容錯](/tw/ch11#容錯)
- [關於物化的討論](/tw/ch11#關於物化的討論)
- [圖與迭代處理](/tw/ch11#圖與迭代處理)
- [Pregel處理模型](/tw/ch11#pregel處理模型)
- [容錯](/tw/ch11#容錯)
- [並行執行](/tw/ch11#並行執行)
- [高階API和語言](/tw/ch11#高階api和語言)
- [向宣告式查詢語言的轉變](/tw/ch11#向宣告式查詢語言的轉變)
- [專業化的不同領域](/tw/ch11#專業化的不同領域)
- [本章小結](/tw/ch11#本章小結)
- [參考文獻](/tw/ch11#參考文獻)
## [第十二章:流處理](/tw/ch12)
- [傳遞事件流](/tw/ch12#傳遞事件流)
- [訊息傳遞系統](/tw/ch12#訊息傳遞系統)
- [直接從生產者傳遞給消費者](/tw/ch12#直接從生產者傳遞給消費者)
- [訊息代理](/tw/ch12#訊息代理)
- [訊息代理與資料庫的對比](/tw/ch12#訊息代理與資料庫的對比)
- [多個消費者](/tw/ch12#多個消費者)
- [確認與重新傳遞](/tw/ch12#確認與重新傳遞)
- [分割槽日誌](/tw/ch12#分割槽日誌)
- [使用日誌進行訊息儲存](/tw/ch12#使用日誌進行訊息儲存)
- [日誌與傳統的訊息傳遞相比](/tw/ch12#日誌與傳統的訊息傳遞相比)
- [消費者偏移量](/tw/ch12#消費者偏移量)
- [磁碟空間使用](/tw/ch12#磁碟空間使用)
- [當消費者跟不上生產者時](/tw/ch12#當消費者跟不上生產者時)
- [重播舊訊息](/tw/ch12#重播舊訊息)
- [資料庫與流](/tw/ch12#資料庫與流)
- [保持系統同步](/tw/ch12#保持系統同步)
- [變更資料捕獲](/tw/ch12#變更資料捕獲)
- [變更資料捕獲的實現](/tw/ch12#變更資料捕獲的實現)
- [初始快照](/tw/ch12#初始快照)
- [日誌壓縮](/tw/ch12#日誌壓縮)
- [變更流的API支援](/tw/ch12#變更流的api支援)
- [事件溯源](/tw/ch12#事件溯源)
- [從事件日誌中派生出當前狀態](/tw/ch12#從事件日誌中派生出當前狀態)
- [命令和事件](/tw/ch12#命令和事件)
- [狀態、流和不變性](/tw/ch12#狀態流和不變性)
- [不可變事件的優點](/tw/ch12#不可變事件的優點)
- [從同一事件日誌中派生多個檢視](/tw/ch12#從同一事件日誌中派生多個檢視)
- [併發控制](/tw/ch12#併發控制)
- [不變性的侷限性](/tw/ch12#不變性的侷限性)
- [流處理](/tw/ch12#流處理)
- [流處理的應用](/tw/ch12#流處理的應用)
- [複合事件處理](/tw/ch12#複合事件處理)
- [流分析](/tw/ch12#流分析)
- [維護物化檢視](/tw/ch12#維護物化檢視)
- [在流上搜索](/tw/ch12#在流上搜索)
- [訊息傳遞和RPC](/tw/ch12#訊息傳遞和rpc)
- [時間推理](/tw/ch12#時間推理)
- [事件時間與處理時間](/tw/ch12#事件時間與處理時間)
- [知道什麼時候準備好了](/tw/ch12#知道什麼時候準備好了)
- [你用的是誰的時鐘?](/tw/ch12#你用的是誰的時鐘)
- [視窗的型別](/tw/ch12#視窗的型別)
- [流連線](/tw/ch12#流連線)
- [流流連線(視窗連線)](/tw/ch12#流流連線視窗連線)
- [流表連線(流擴充)](/tw/ch12#流表連線流擴充)
- [表表連線(維護物化檢視)](/tw/ch12#表表連線維護物化檢視)
- [連線的時間依賴性](/tw/ch12#連線的時間依賴性)
- [容錯](/tw/ch12#容錯)
- [微批次與存檔點](/tw/ch12#微批次與存檔點)
- [原子提交再現](/tw/ch12#原子提交再現)
- [冪等性](/tw/ch12#冪等性)
- [失敗後重建狀態](/tw/ch12#失敗後重建狀態)
- [本章小結](/tw/ch12#本章小結)
- [參考文獻](/tw/ch12#參考文獻)
## [第十三章:資料系統的未來](/ch13)
- [資料整合](/ch13#資料整合)
- [組合使用派生資料的工具](/ch13#組合使用派生資料的工具)
- [理解資料流](/ch13#理解資料流)
- [派生資料與分散式事務](/ch13#派生資料與分散式事務)
- [全序的限制](/ch13#全序的限制)
- [排序事件以捕獲因果關係](/ch13#排序事件以捕獲因果關係)
- [批處理與流處理](/ch13#批處理與流處理)
- [維護衍生狀態](/ch13#維護衍生狀態)
- [應用演化後重新處理資料](/ch13#應用演化後重新處理資料)
- [Lambda架構](/ch13#lambda架構)
- [統一批處理和流處理](/ch13#統一批處理和流處理)
- [分拆資料庫](/ch13#分拆資料庫)
- [組合使用資料儲存技術](/ch13#組合使用資料儲存技術)
- [建立索引](/ch13#建立索引)
- [一切的元資料庫](/ch13#一切的元資料庫)
- [開展分拆工作](/ch13#開展分拆工作)
- [分拆系統vs整合系統](/ch13#分拆系統vs整合系統)
- [少了什麼?](/ch13#少了什麼)
- [圍繞資料流設計應用](/ch13#圍繞資料流設計應用)
- [應用程式碼作為衍生函式](/ch13#應用程式碼作為衍生函式)
- [應用程式碼和狀態的分離](/ch13#應用程式碼和狀態的分離)
- [資料流:應用程式碼與狀態變化的互動](/ch13#資料流應用程式碼與狀態變化的互動)
- [流處理器和服務](/ch13#流處理器和服務)
- [觀察派生資料狀態](/ch13#觀察派生資料狀態)
- [物化檢視和快取](/ch13#物化檢視和快取)
- [有狀態、可離線的客戶端](/ch13#有狀態可離線的客戶端)
- [將狀態變更推送給客戶端](/ch13#將狀態變更推送給客戶端)
- [端到端的事件流](/ch13#端到端的事件流)
- [讀也是事件](/ch13#讀也是事件)
- [多分割槽資料處理](/ch13#多分割槽資料處理)
- [將事情做正確](/ch13#將事情做正確)
- [資料庫的端到端原則](/ch13#資料庫的端到端原則)
- [正好執行一次操作](/ch13#正好執行一次操作)
- [抑制重複](/ch13#抑制重複)
- [操作識別符號](/ch13#操作識別符號)
- [端到端原則](/ch13#端到端原則)
- [在資料系統中應用端到端思考](/ch13#在資料系統中應用端到端思考)
- [強制約束](/ch13#強制約束)
- [唯一性約束需要達成共識](/ch13#唯一性約束需要達成共識)
- [基於日誌訊息傳遞中的唯一性](/ch13#基於日誌訊息傳遞中的唯一性)
- [多分割槽請求處理](/ch13#多分割槽請求處理)
- [及時性與完整性](/ch13#及時性與完整性)
- [資料流系統的正確性](/ch13#資料流系統的正確性)
- [寬鬆地解釋約束](/ch13#寬鬆地解釋約束)
- [無協調資料系統](/ch13#無協調資料系統)
- [信任但驗證](/ch13#信任但驗證)
- [維護完整性儘管軟體有Bug](/ch13#維護完整性儘管軟體有bug)
- [不要盲目信任承諾](/ch13#不要盲目信任承諾)
- [驗證的文化](/ch13#驗證的文化)
- [為可審計性而設計](/ch13#為可審計性而設計)
- [端到端原則重現](/ch13#端到端原則重現)
- [用於可審計資料系統的工具](/ch13#用於可審計資料系統的工具)
- [做正確的事情](/ch13#做正確的事情)
- [預測性分析](/ch13#預測性分析)
- [偏見與歧視](/ch13#偏見與歧視)
- [責任與問責](/ch13#責任與問責)
- [反饋迴圈](/ch13#反饋迴圈)
- [隱私和追蹤](/ch13#隱私和追蹤)
- [監視](/ch13#監視)
- [同意與選擇的自由](/ch13#同意與選擇的自由)
- [隱私與資料使用](/ch13#隱私與資料使用)
- [資料資產與權力](/ch13#資料資產與權力)
- [回顧工業革命](/ch13#回顧工業革命)
- [立法與自律](/ch13#立法與自律)
- [本章小結](/ch13#本章小結)
- [參考文獻](/ch13#參考文獻)
## [11. 批處理](/tw/ch11)(未釋出)
## [12. 流處理](/tw/ch12)(未釋出)
## [13. 做正確的事](/ch13)(未釋出)
## [術語表](/tw/glossary)
## [後記](/tw/colophon)
## [後記](/tw/colophon)
- [關於作者](/tw/colophon#關於作者)
- [關於譯者](/tw/colophon#關於譯者)
- [後記](/tw/colophon#後記)

View file

@ -29,12 +29,6 @@ languages:
contentDir: content/zh
weight: 1
title: 设计数据密集型应用(第二版)
v2:
languageName: 第二版
languageCode: v2
contentDir: content/v2
weight: 2
title: 设计数据密集型应用(第二版)
tw:
languageName: 繁体中文
languageCode: tw
@ -87,10 +81,6 @@ menu:
name: "简体中文 ↗"
url: "/"
weight: 2
- identifier: simplified-chinese2
name: "第二版 ↗"
url: "/v2"
weight: 3
- identifier: traditional-chinese
name: "繁體中文 ↗"
url: "/tw"