a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數(shù)據(jù)庫 > MongoDB > 正文

MongoDB范圍片鍵和哈希片鍵有什么區(qū)別?

2024-09-07 00:22:35
字體:
供稿:網(wǎng)友
      這篇文章給大家介紹MongoDB片鍵,主要介紹范圍片鍵和哈希片鍵以及兩者的不同,對大家學(xué)習(xí)和理解MongoDB有一定的參考價值,感興趣的朋友就繼續(xù)往下看吧。
01 片鍵
      MongoDB的片鍵決定了集合中存儲的數(shù)據(jù)在集合中的分布情況,具體的方法是使用片鍵值的范圍來對集合中的數(shù)據(jù)進(jìn)行分區(qū)。舉個例子:
 
      需要注意的是,在一個集合中,被選為片鍵的這個字段上必須有一個支持片鍵的索引,或者是必須有一個以這個字段開頭的聯(lián)合索引。通常情況下,我們給字段添加的索引,最常見的是普通索引或者哈希索引,普通的索引字段如果作為片鍵,那么這個片鍵我們稱為范圍片鍵;哈希索引字段如果作為片鍵,那么這個片鍵我們稱為哈希片鍵。下面我們來看二者的不同之處:
 
02 范圍片鍵(遞增片鍵)
      范圍片鍵,顧名思義,就是將數(shù)據(jù)根據(jù)片鍵劃分到連續(xù)的范圍里面,在這個模型中,那些值"相似"的文檔可能位于同一個片中。例如下面這樣:
 
      好處:
 
      可以高效的讀取連續(xù)范圍內(nèi)的目標(biāo)文檔。如果你使用范圍查詢,則可以比較快速的拿到所有的結(jié)果值。因為數(shù)據(jù)所在的數(shù)據(jù)chunk比較少。
 
      壞處:
 
      如果我們寫入的數(shù)據(jù)都幾種在某一個分片區(qū)間,那么讀寫性能都可能因為片鍵劃分不均勻而降低。(例如下圖中,數(shù)據(jù)的基數(shù)大部分在20~maxKey,則大部分都在chunk C的位置,本身分布不均勻),Chunk C的寫入壓力將會增大。
 
 
 
      在下列場景中,使用范圍片鍵比較合適:
 
      1、數(shù)據(jù)的基數(shù)比較大
 
      2、分片的寫入頻率比較低(插入較少不容易產(chǎn)生chunk的搬運(yùn))
 
      3、非單調(diào)變化的分片(如果單調(diào)寫,則會分到同一個塊里面,容易達(dá)到chunk割裂的條件,產(chǎn)生chunk的搬運(yùn))
 
      如果數(shù)據(jù)滿足上面的三個條件,則我們寫入的數(shù)據(jù)可能是這樣的:
 
 
 
      就是比較均勻的寫入到了數(shù)據(jù)塊中。
 
03 哈希片鍵
      哈希片鍵使用哈希索引在共享集群中對數(shù)據(jù)進(jìn)行分區(qū)。哈希索引計算單個字段的哈希值作為索引值,該值用作片鍵(注意,這里并不是字段本身的值,而是hash之后的值)。
 
 
      作為哈希片鍵的索引字段應(yīng)該有如下特點(diǎn):
 
      1、具有大量不同的值
 
      2、哈希索引適合單調(diào)變化的字段,例如自增值,時間值等(因為可以將單調(diào)的字段通過hash函數(shù)映射到不同的塊上去,從而分散寫入壓力,例如下圖,雖然數(shù)據(jù)連續(xù),但是寫入了不同的數(shù)據(jù)塊中)
 
      下面是分片創(chuàng)建從無到有的過程舉例:
 
1、創(chuàng)建表,只有一個字段name,并插入數(shù)據(jù)
mongos> use aaa
switched to db aaa
mongos> db.aaa.insert({name:1})
WriteResult({ "nInserted" : 1 })
mongos> db.aaa.insert({name:2})
WriteResult({ "nInserted" : 1 })
mongos> db.aaa.insert({name:3})
WriteResult({ "nInserted" : 1 })
mongos> db.aaa.insert({name:4})
WriteResult({ "nInserted" : 1 })
mongos>
 
2、查看數(shù)據(jù)
mongos> db.aaa.find()
{ "_id" : ObjectId("5fdb7d54d91f2f9bae3b09a1"), "name" : 1 }
{ "_id" : ObjectId("5fdb7d56d91f2f9bae3b09a2"), "name" : 2 }
{ "_id" : ObjectId("5fdb7d59d91f2f9bae3b09a3"), "name" : 3 }
{ "_id" : ObjectId("5fdb7d5cd91f2f9bae3b09a4"), "name" : 4 }
 
3、允許數(shù)據(jù)庫分片
mongos> sh.enableSharding("aaa")
{
 "ok" : 1,
 "operationTime" : Timestamp(1608220038, 3),
 "$clusterTime" : {
  "clusterTime" : Timestamp(1608220038, 3),
  "signature" : {
   "hash" : BinData(0,"shemm3xvSYrMiy9t7gSYcVtFUuE="),
   "keyId" : NumberLong("6894922308364795934")
  }
 }
}
mongos>
 
4、在name字段創(chuàng)建hash索引
mongos> db.aaa.createIndex({name:"hashed"},{background:true})
{
 "raw" : {
  "sharding_yeyz/127.0.0.1:27018,127.0.0.1:27019,127.0.0.1:27020" : {
   "createdCollectionAutomatically" : false,
   "numIndexesBefore" : 1,
   "numIndexesAfter" : 2,
   "ok" : 1
  }
 },
 "ok" : 1,
 "operationTime" : Timestamp(1608220115, 3),
 "$clusterTime" : {
  "clusterTime" : Timestamp(1608220115, 3),
  "signature" : {
   "hash" : BinData(0,"S3Wz9G26eJyOcwa1OLS6TVYu6SE="),
   "keyId" : NumberLong("6894922308364795934")
  }
 }
}
 
5、以name字段作為片鍵創(chuàng)建哈希分片
mongos> sh.shardCollection("aaa.aaa",{name:"hashed"})
{
 "collectionsharded" : "aaa.aaa",
 "collectionUUID" : UUID("20a3895e-d821-43ae-9d28-305e6ae03bbc"),
 "ok" : 1,
 "operationTime" : Timestamp(1608220238, 10),
 "$clusterTime" : {
  "clusterTime" : Timestamp(1608220238, 10),
  "signature" : {
   "hash" : BinData(0,"qeQlD3jsSvRZkyamEa2hjbezEdM="),
   "keyId" : NumberLong("6894922308364795934")
  }
 }
}

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人精品一区 | 国产 日韩 欧美 制服 另类 | 日本亚洲一区 | 久久99精品国产99久久6男男 | 成人精品在线 | 国偷自产视频一区二区久 | 国内精品国产三级国产在线专 | 久久99精品久久久久久青青日本 | 日韩在线观看中文字幕 | 日韩国产一区二区三区 | 欧洲三级在线 | 伊人春色网 | 国产69精品99久久久久久宅男 | 一级视频在线免费观看 | 久久夜夜 | 一区二区三区国产精品 | 九九热精品在线观看 | 日韩欧美在线一区 | 国产亚洲一区二区三区在线观看 | 欧美经典一区 | 国产在线一区二区 | 午夜av免费 | 国产在线精品福利 | 欧美大片一区二区 | 免费日本视频 | 精品一区二区国产 | 国内成人精品2018免费看 | 色综合久久天天综合网 | 九九热在线免费视频 | 国产一区高清 | 亚洲精品视频在线免费 | 欧美亚洲国产一区 | 欧美一二区 | 色天天综合久久久久综合片 | 精品国产一区二区 | 亚洲另类视频 | 中国女人黄色大片 | 日韩欧美二区 | 中文字幕在线精品 | 亚洲成av人片一区二区梦乃 | 午夜激情视频在线观看 |