什么是MongoDB分片
MongoDB分片是指將資料庫拆分成多份,把它們分散到不同的機器上,從而實作不需要功能強大的服務器就可以存盤更多的資料和處理更多的請求,
MongoDB分片的基本思想就是將集合切分成小塊,這些塊分散到若干分片里面,每個分片只負責總資料的一部分,
對于應用程式來說,不必知道哪個分片對應哪些資料,甚至不需要知道資料已經被分片,當應用程式查詢資料時,只需要連接一個前置路由即可,這個前置路由通過查詢配置服務器獲取資料所在的目標分片,從而獲取目標資料,
MongoDB分片的目的
高資料量和吞吐量的資料庫應用會對單機的性能造成較大壓力,大的查詢量會將單機的CPU耗盡,大的資料量對單機的存盤壓力較大,最侄訓耗盡系統的記憶體而將壓力轉移到磁盤IO上,
為了解決這些問題,有兩個基本的方法: 垂直擴展和水平擴展,
垂直擴展:增加更多的CPU和存盤資源來擴展容量,
水平擴展:將資料集分布在多個服務器上,水平擴展即分片,
分片為應對高吞吐量與大資料量提供了方法,使用分片減少了每個分片需要處理的請求數,因此,通過水平擴展,集群可以提高自己的存盤容量和吞吐量,舉例來說,當插入一條資料時,應用只需要訪問存盤這條資料的分片,
使用分片減少了每個分片存盤的資料,例如,如果資料庫1TB的資料集,并有4個分片,然后每個分片可能僅持有256 GB的資料,如果有40個分片,那么每個切分可能只有25GB的資料,
MongoDB分片架構
MongoDB分片架構中,有三個角色:
- Mongos :就是上面提到的路由器,是和客戶端打交道的模塊,Mongos本身沒有任何資料,它也不知道該怎么處理這資料,而是通過Config Server來獲取;
- Config Server:配置服務器,所有Shard節點的資訊、分片功能的一些配置資訊都存盤在Config Server里,可以理解為真正資料的元資料;
- Sh
ard:真正資料存盤的位置,以Chunk為單位存盤,
Mongos本身并不持久化資料,所有Shard集群的元資料都會存盤到Config Server里,而用戶的資料會分散存盤到各個Shard,Mongos啟動后,會從Config Server加載元資料,開始提供服務,將用戶的請求正確路由到對應的分片上,
Shard Key
可以說,Shard Key(中文翻譯成片鍵)是MongoDB實作分片的依仗!
MongoDB中資料的分片以集合為基本單位,集合中的資料通過Shard Key被分成多部分,其實Shard Key就是在集合中選了一個鍵,用該鍵的值作為資料拆分的依據,
舉個例子,假設有個存盤人員資訊的檔案集合,如果選擇名字"name"作為Shard Key,那么第一分片可能會存放名字以 A-F 開頭的檔案,第二分片存 G-P 開頭的檔案,第三分片存Q-Z的檔案,
一個好的Shard Key對分片至關重要,
有一點需要注意,一個自增的Shard Key對寫入和資料均勻分布不是很友好,因為自增的Shard Key總會在一個分片上寫入,后續達到某個閥值才可能會寫到別的分片上,但是反過來講,按Shard Key查詢(讀取)會非常高效,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/547432.html
標籤:其他
上一篇:RHCE服務---Web
