search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

微客加|關係型資料庫的分片原則(下)

技術說

網路上存在很多有關分片的觀點。我們發現它們大部分都是基於單一的應用類型。事實上,應用類型比其他因素更能影響到分片。B2B類型的應用最容易進行分片。

二,分片中最重要的屬性:應用類型(B2B或B2C)

Y-軸展示了在對成熟資料庫進行分片時最為重要的屬性:應用程序的類型。在這條軸上,B2B應用處於最上端,它們的數據模型更容易進行分片。B2C應用處於軸的底部,比如Amazon和Facebook,它們的分片需要做更多的工作。接下來,我們挑選了三家知名的公司來比對它們之間的不同點。

B2B類型:Salesforce

CRM系統是B2B應用最為典型的例子。構建CRM系統的目的是為了要給其他客戶提供服務的,我們假設GE Aviation是你的一個客戶,他們正在使用Salesforce。GE Aviation有如下的一些實體。

●客戶(customer):公司的顧客。●用戶(user):用戶可以登錄GE公司的儀錶盤。●負責人(lead):GE與這些負責人商談業務。●聯繫人(contact):GE與這些聯繫人有了業務往來,並知道他們的聯繫方式。●賬號(account):業務代表和擁有聯繫人的人。●機會(opportunity):與賬號和聯繫人相關的銷售事件。

如果把這些實體之間的複雜關係映射到資料庫里,看起來是這樣的:

整個圖咋一看確實很複雜,不過如果你多花一點時間看仔細一點,你會發現大多數表都是源自customer表。通過往每個表裡添加customer_id列可以把表間關係轉換成如下形式:

通過這種簡單的轉換,就可以通過customer_id這個鍵進行資料庫分片。這個鍵可以讓數據均勻地分佈,而大部分查詢都需要帶上這個鍵。另外,你還可以根據customer_id把相關表聚集在同一個位置,這樣就可以繼續使用關係型資料庫的一些關鍵特性,比如事務、表連接和外鍵。換句話說,如果你的應用類型是B2B的,那麼你的數據就具備了分片的天然特性。

B2C類型:Amazon

Amazon是B2C應用最為典型的例子。在構建像Amazon這樣的網站時,有許多東西需要考慮。首先,用戶來到你的網站,瀏覽你的商品,比如書或電子產品。假設用戶在瀏覽《Harry Potter 7》,他們也可以看到這個產品的分類信息,比如書本的作者、價格、封面和其他圖片。用戶在登錄網站之後,開始訪問用戶相關的數據。用戶需要得到認證,然後獲得給產品添加評論的許可權或者把產品添加到購物車裡。在某個時候,用戶決定要購買購物車裡的產品,於是就下單。訂單經過處理之後,開始進入物流運送流程。

你會發現,現在的關係圖與Salesforce的關係圖有一個很大的不同點。現在的關係圖中不止一個中心點,而是三個:分類(catalog)、用戶(user)和訂單(order)。要對這種B2C類型的數據進行分片,可以考慮將它們重構成微服務。例如,與產品目錄相關的服務提供目錄服務,用戶相關的服務提供認證和購物車服務。服務之間的API定義了底層數據訪問的邊界。數據經過拆分之後,就可以進行分片。事實上,Amazon在遷移到面向服務架構時就使用了類似的方式進行數據分片。這種分片方式與B2B應用的分片在好處和成本比率上有很大的差別。從好處方面來看,你可以依賴資料庫從不同的資料庫連接數據,或者為數據集提供事務和約束。從成本方面來看,現在要進行分片的不止是一個數據集,而是多個。B2C2C類型:Instacart在B2B和B2C之間還有另外一種類型的網站,比如Postmates、Instacart或Lyft。[Instacart][12]的主營業務是將本地商店的貨物運送給用戶。從某方面來看,Instacart與Amazon有點類似。Instacart的數據模型具有三個維度:提供貨物的本地商店、訂購商品的用戶和運送貨物的司機。所以,很難在這當中挑出一個鍵進行分片。如果你的應用屬於B2C2C類型,可能需要採取不同的策略。你會發現大部分數據表會共享一個維度:地理位置信息。在這種情況下,你可能會選擇城市或地理位置作為分片的鍵。一般來說,B2B2C應用或B2C2C應用的分片處於圖譜的中間。B2B2C分片的好處和成本之間的比率要高於B2C應用,但低於B2B應用。結論網路上存在很多有關分片的觀點。我們發現它們大部分都是基於單一的應用類型。事實上,應用類型比其他因素更能影響到分片。B2B類型的應用最容易進行分片。

作者 Ozgun Erdogan ,譯者 薛命燈



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦