weblab-tw / ddia-study-group

Designing Data-Intensive Applications Study Group
36 stars 4 forks source link

第六章節:學習要點 #64

Open JimmyFUFU opened 2 years ago

JimmyFUFU commented 2 years ago

我沒準備 kahoot 會不會破壞傳統 Q


0x171-0 commented 2 years ago
at7211 commented 2 years ago
samwu4166 commented 2 years ago

現在主要的兩種分割槽方法:

固定配置分割槽:

例如,執行在 10 個節點的叢集上的資料庫可能會從一開始就被拆分為 1,000 個分割槽,因此大約有 100 個分割槽被分配給每個節點。

這樣當節點變多的時候,可以從『每個節點』把多的分割槽讓給新的節點即可

Ex. Riak 【15】、Elasticsearch 【24】、Couchbase 【10】和 Voldemort 【25】

動態配置分割槽:

例如 HBase,一開始指會有一個分割槽,且上限是 10GB,如果資料超過了,就會動態配置一個,並且讓兩個分割槽儲存差不多量的資料。並且會依據分割槽容量的減少來一併縮減分割槽。

Ex. RethinkDB, MongoDB(2.4後支援)

Cassandra 和 Ketama 使用的第三種方法是使分割槽數與節點數成正比 。在這種情況下,每個分割槽的大小與資料集大小成比例地增長,而節點數量保持不變,但是當增加節點數時,分割槽將再次變小。當一個新節點加入叢集時,它隨機選擇固定數量的現有分割槽進行拆分,然後佔有這些拆分分割槽中每個分割槽的一半,同時將每個分割槽的另一半留在原地。

再平衡的觸發方法:

服務發現(service discovery)

AK4codee commented 2 years ago

分區類型

Parkerhiphop commented 2 years ago

Why Partitioning? → Scalability

  1. 過大的資料集 or 過高的吞吐量
  2. Replication 會產生極高的延遲
  3. 需要將資料分成 Partition(分割) or Sharding(分片)

What?

兩種主要的 Partitioning Approach

  1. Key Range:查詢快,但也有熱點風險
  2. Hash:查詢曼,但較均衡附載
  3. **使用複合 Primary Key 並行

Partitioning & Secondary Index

  1. Document-based (Local Index): 寫入單個,讀取時要多個
  2. Term-based(Global Index): 寫入在多個,讀取時可單個

Request Routing 的三種做法

  1. 讓 Client 自由聯絡任何節點:用迴圈策略的負載平衡
  2. 做一個 Router Layer
  3. Client 本身就知道 Partition 和 Node 要打哪個

如何知道要打哪個?

  1. 統一的協調服務,如 ZooKeeper
  2. Gossip Protocol,運用做法 1
jxiu0129 commented 2 years ago
  1. key-value partition
    • 鍵值範圍
    • hash map
      1. partition rebalance
    • (固定)建立比節點更多的分割槽,併為每個節點分配多個分割槽
    • (動態)當分割槽增長到超過配置的大小時,會被分成兩個分割槽,每個分割槽約佔一半的資料。與之相反,如果大量資料被刪除並且分割槽縮小到某個閾值以下,則可以將其與相鄰分割槽合併
    • (按節點比例)每個節點具有固定數量的分割槽。在這種情況下,每個分割槽的大小與資料集大小成比例地增長,而節點數量保持不變,但是當增加節點數時,分割槽將再次變小
  2. 請求路由 - zookeeper
taco0929 commented 2 years ago

分區

將儲存分散在(多個)硬碟並分散查詢的處理器 範圍分區: 以鍵的最大、最小值分配分區範圍 散列分區: 以鍵(如哈希值或散射函數)平均分配

Jay0328 commented 2 years ago

Partition

Why

How

將大 database 切分為較小 database,增加 scalability,並可以放在不同 nodes 中

Term

Partition Method/Strategy

Hot Spot 消除

目前 database 無法自動檢測和補償高度 skew 的情況,需要在 application layer 額外實作

Ex: 社群網站上一個有百萬追蹤者的名人在做某事時

解法: 在 index 的開始或結尾加上隨機數

Secondary Index

Rebalancing

Manual or Auto

Routing