最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

MongoDB分片原理及架構詳解

2023-03-20 22:54 作者:阿銘Linux  | 我要投稿

什么是MongoDB分片

MongoDB分片是指將數(shù)據(jù)庫拆分成多份,把它們分散到不同的機器上,從而實現(xiàn)不需要功能強大的服務器就可以存儲更多的數(shù)據(jù)和處理更多的請求。

MongoDB分片的基本思想就是將集合切分成小塊,這些塊分散到若干分片里面,每個分片只負責總數(shù)據(jù)的一部分。

對于應用程序來說,不必知道哪個分片對應哪些數(shù)據(jù),甚至不需要知道數(shù)據(jù)已經(jīng)被分片。當應用程序查詢數(shù)據(jù)時,只需要連接一個前置路由即可。這個前置路由通過查詢配置服務器獲取數(shù)據(jù)所在的目標分片,從而獲取目標數(shù)據(jù)。

MongoDB分片的目的

高數(shù)據(jù)量和吞吐量的數(shù)據(jù)庫應用會對單機的性能造成較大壓力,大的查詢量會將單機的CPU耗盡,大的數(shù)據(jù)量對單機的存儲壓力較大,最終會耗盡系統(tǒng)的內(nèi)存而將壓力轉移到磁盤IO上。

為了解決這些問題,有兩個基本的方法: 垂直擴展和水平擴展。

垂直擴展:增加更多的CPU和存儲資源來擴展容量。

水平擴展:將數(shù)據(jù)集分布在多個服務器上,水平擴展即分片。

分片為應對高吞吐量與大數(shù)據(jù)量提供了方法。使用分片減少了每個分片需要處理的請求數(shù),因此,通過水平擴展,集群可以提高自己的存儲容量和吞吐量。舉例來說,當插入一條數(shù)據(jù)時,應用只需要訪問存儲這條數(shù)據(jù)的分片。

使用分片減少了每個分片存儲的數(shù)據(jù)。例如,如果數(shù)據(jù)庫1TB的數(shù)據(jù)集,并有4個分片,然后每個分片可能僅持有256 GB的數(shù)據(jù)。如果有40個分片,那么每個切分可能只有25GB的數(shù)據(jù)。

MongoDB分片架構

MongoDB分片架構中,有三個角色:

  • Mongos :就是上面提到的路由器,是和客戶端打交道的模塊。Mongos本身沒有任何數(shù)據(jù),它也不知道該怎么處理這數(shù)據(jù),而是通過Config Server來獲??;

  • Config Server:配置服務器,所有Shard節(jié)點的信息、分片功能的一些配置信息都存儲在Config Server里,可以理解為真正數(shù)據(jù)的元數(shù)據(jù);

  • Sh

ard:真正數(shù)據(jù)存儲的位置,以Chunk為單位存儲。

Mongos本身并不持久化數(shù)據(jù),所有Shard集群的元數(shù)據(jù)都會存儲到Config Server里,而用戶的數(shù)據(jù)會分散存儲到各個Shard。Mongos啟動后,會從Config Server加載元數(shù)據(jù),開始提供服務,將用戶的請求正確路由到對應的分片上。

Shard Key

可以說,Shard Key(中文翻譯成片鍵)是MongoDB實現(xiàn)分片的依仗!

MongoDB中數(shù)據(jù)的分片以集合為基本單位,集合中的數(shù)據(jù)通過Shard Key被分成多部分。其實Shard Key就是在集合中選了一個鍵,用該鍵的值作為數(shù)據(jù)拆分的依據(jù)。

舉個例子,假設有個存儲人員信息的文檔集合,如果選擇名字"name"作為Shard Key,那么第一分片可能會存放名字以 A-F 開頭的文檔。第二分片存 G-P 開頭的文檔,第三分片存Q-Z的文檔。

一個好的Shard Key對分片至關重要。

有一點需要注意,一個自增的Shard Key對寫入和數(shù)據(jù)均勻分布不是很友好,因為自增的Shard Key總會在一個分片上寫入,后續(xù)達到某個閥值才可能會寫到別的分片上。但是反過來講,按Shard Key查詢(讀取)會非常高效。


MongoDB分片原理及架構詳解的評論 (共 條)

分享到微博請遵守國家法律
蒙自县| 绥阳县| 柳州市| 定安县| 苗栗市| 视频| 文山县| 巩义市| 乐清市| 吉林省| 屯留县| 枝江市| 新建县| 石家庄市| 莒南县| 济阳县| 武乡县| 大荔县| 漾濞| 蓬安县| 阿合奇县| 阿图什市| 桂东县| 神池县| 固镇县| 朝阳县| 石柱| 曲麻莱县| 通州市| 应用必备| 金溪县| 洛浦县| 德兴市| 伊吾县| 宣城市| 六安市| 东乡县| 巴楚县| 中西区| 郓城县| 肃北|