關聯式資料庫分片原則
當資料庫資料量很小時,很多問題可以透過硬體進行擴充套件。然而,隨著資料表數量的增長,就需要考慮其他擴充套件資料庫的方法了。
在某種程度上,分片Sharding是最好的擴充套件方式。分片讓你將資料庫切分成較小的部分,以實現資料庫cpu、記憶體和磁碟資源的線性擴充套件。但是,分片是一個有爭議性的話題。網際網路上有關於分片截然相反的建議,從“ 將資料庫基礎設施擴充套件到必要”到“ 為什麼你不要分片”。那麼問題來了,你到底應該採納哪個建議呢?
什麼時候需要分片?答案是“依賴於具體情況”。
分片理論很簡單:選擇一個能均勻分佈資料的鍵key(列)。確保大部分查詢可以被該key定位到。這個理論很簡單,但一旦你將其落地到你的資料庫,實踐問題就變得凌亂了。
在Citus,我們幫助了數百個團隊研究如何分片資料庫。在這個過程中發現了一些關鍵模式。
分片的成功取決於三個關鍵屬性
三個關鍵屬性會影響專案的成功:
1. 工作負載型別。從事務機制到CRUD到資料倉儲。伸縮擴充套件時,這個維度是最被認可的。
2. 應用程式生命週期。您的資料庫中有多少張表(10?,100?,1000?)或您的應用程式在生產環境中執行有多長時間?在PostgreSQL上執行幾個月的應用程式將比執行很多年的應用程式更容易分片。
當您有成熟的應用程式時,這個因素變得至關重要。可悲的是,這個維度與其他兩個方面並不一致。事實上,大多數關於分片文章之所以得出相互矛盾的結論,是因為他們都是基於特定的一種應用上下文中提供的建議。
3.最重要的是:應用型別(B2B或B2C)
B2B的資料模型更適合分片。B2C應用程式,如亞馬遜和Facebook,分片則需要花費更多工作。接下來,我們選擇三家知名公司,談論他們的差異。
B2B示例:Salesforce
B2B應用的一個很好例子是CRM客戶管理軟體(Salesforce)。比如GE航空將成為Salesforce客戶。
在GE航空公司,有以下幾個資料表:
1. user是登陸使用者表
2. leads 是需要直接做生意的人員
3. contacts 代表生意關係
4. account代表有業務關係的
這幾個表看起來很複雜。如果你花更多的時間來研究它,那麼你會發現大多數表來自於customer表。你可以向這些表新增customer_id列,就是這麼簡單的變化,您的資料庫現在有了一個很好的分片鍵:customer_id。該分片鍵通常分佈均勻; 並且對資料庫的大多數查詢都會使用customer_id。
換句話說,如果您是B2B應用程式,業務資料的性質可以為您提供分片的基本優勢。
B2C示例:Amazon.com
Amazon.com是成熟B2C應用程式的一個很好的例子。如果您自己來建立Amazon.com網站,您可以考慮下面流程:
首先,使用者來到您的網站可以檢視您提供的產品,如書籍或電子產品。當使用者訪問產品頁面時,他們會看到與該產品相關的目錄資訊。
當您的使用者登入到您的網站時,他們就開始訪問與使用者相關的資料。使用者需要進行身份驗證,可以寫評論他們喜愛的產品,並可以新增產品專案到他們的購物車。使用者決定購買商品會下訂單。訂單處理完成,倉庫傳送貨物。
這裡涉及幾個資料表:
1.catalog 是產品目錄表
2.user是使用者表
3.order是訂單表
4.shipment是貨運表
當您要分片這些B2C資料型別時,其中一個解決方式是將您的應用程式重構為微服務。例如,提供catalog目錄資料的與目錄相關服務,以及擁有身份驗證和購物車資料的使用者相關服務。每個微服務只能訪問它們自己的資料庫,因此這些服務之間邊界其實定義了訪問底層資料的邊界。
這種分片方法與分割B2B應用程式在成本上相比是有明顯的不同。
相關文章
- Web Sql 關聯式資料庫WebSQL資料庫
- 關聯式資料庫很快會替代向量資料庫資料庫
- 關聯式資料庫與文件資料庫對比資料庫
- 關聯式資料庫 Query_Execution資料庫
- 事件溯源超越關聯式資料庫 - confluent事件資料庫
- 破解分散式庫使用難點:資料分片策略分散式
- 如何分片資料庫? - stackoverflow資料庫
- 事件溯源將顛覆關聯式資料庫! - Remy事件資料庫REM
- 資料庫設計原則與方法資料庫
- 有關資料驗證的原則
- 響應式關聯式資料庫處理R2DBC資料庫
- 如何將傳統關聯式資料庫的資料匯入Hadoop?資料庫Hadoop
- 分散式文件儲存資料庫之MongoDB分片叢集分散式資料庫MongoDB
- 主流關聯式資料庫鎖實現的區別資料庫
- 關係型資料庫全表掃描分片詳解資料庫
- 使用反應式關聯式資料庫連線規範R2DBC操作MySQL資料庫資料庫MySql
- 金融級分散式關聯式資料庫OceanBase 2.2版正式釋出分散式資料庫
- 資料庫系統原理-關聯式資料庫的規範化理論總結資料庫
- 資料庫分片(Database Sharding)詳解資料庫Database
- 基於記憶體的關聯式資料庫memsql初探記憶體資料庫SQL
- OceanBase 首席架構師:關聯式資料庫到三代分散式資料庫,我親歷的資料庫演進史架構資料庫分散式
- 資料庫入門之RDS選擇原則資料庫
- 陽振坤:分散式技術引領關聯式資料庫發展分散式資料庫
- Java響應式關聯式資料庫多執行緒實現方式Java資料庫執行緒
- MySQL 8.0 在關聯式資料庫方面有這些新特性MySql資料庫
- 關聯式資料庫的正規化(Normal Form)知識點資料庫ORM
- 海量列式非關聯式資料庫HBase 架構,shell與API資料庫架構API
- 我設計資料庫常用的幾個原則資料庫
- mysql資料庫最佳化需要遵守的原則MySql資料庫
- 資料庫也可以像電腦一樣組裝:使用Kafka建立關聯式資料庫 – Robert Yokota資料庫Kafka
- 匯豐銀行從65個關聯式資料庫遷移到一個全球MongoDB資料庫 - diginomica資料庫MongoDB
- 陽振坤:OceanBase如何跨越關聯式資料庫的“死亡之谷”資料庫
- 關聯式資料庫正規化詳解(Normal form,簡稱NF)資料庫ORM
- 關聯式資料庫SQL面試排名前100道問答題資料庫SQL面試
- 寫給關聯式資料庫開發者的 TDengine 入門指南資料庫
- 相比NoSQL,關聯式資料庫為何不適合儲存影像? - RedditSQL資料庫
- mongodb資料庫範圍分片資料分佈不均勻MongoDB資料庫
- 銀聯分散式資料庫安全設計分散式資料庫
- springboot建立與資料庫關聯模組Spring Boot資料庫