日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MongoDB】Sharding分片概念及原理

發布時間:2024/9/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MongoDB】Sharding分片概念及原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面對海量的數據,如何提升數據讀寫效率?了解過DB的應該都知道數據庫的分區,分區是主要提升數據查詢的效率。面對海量數據的IO能力限制以及擴展性,Sharding是一個利器,我們不用關心具體的實現,從而實現性能的提升。

Sharding不是一門技術,而是一個理念,解決數據的水平擴展,突破單節點的IO限制。很多成熟的NoSQL以及NewSQL就自帶了sharding實現,使用者直接指定需要分片的字段,集群就可以自行分片了。

sharding是share nothing的簡寫,在不同的片區,數據互不干擾。和傳統的分區不同,數據庫分區是物理數據庫實現的技術,目的是為了在操作數據庫時減少SQL設計的讀寫范圍,提升讀數據的時間。sharding是面對分布式的存儲,將查詢進行并行處理。

sharding是負責數據的一個子集中一臺或多臺服務器,如果有多臺服務器,每一臺服務器都是一個數據的副本,通常我們在replica set中可以設定副本數。一般來說,在定義了分片key字段后,sharding有三種方式:

  • 按號段

  • hash取模

  • 用戶自定義

  • 很多nosql和newSQL已經實現了sharding技術,下面以MongoDB和Mysql cluster為例來詳細介紹。

    MongoDB

    在指定了分片字段(shard key)后,mongoDB集群會將數據自行進行分區,通過數據量進行分片。同時他會對每一分片進行區間劃分,每一區間又各自存儲不同范圍的數據。這么做目的是為了進行數據的合理轉移,減少因為大數據量的轉移帶來的網絡開銷,影響使用。通常塊定義大小是200M,定義過大,會導致移動數據大帶來的網絡開銷,過小,又會帶來管理開銷。

    mongoDB在移動數據使之達到平衡的工作,由一個平衡器進程來做,自動化完成,你無需關心其中細節。平衡器的目標不僅是平衡,還需要最小化遷移量。

    用戶不會直接的訪問mongo分片,二是通過mongoDB的終端mongos來訪問,其會轉移所有的請求到對應的分片,而所有的配置,都保存在mongod配置服務器上,mongod是輕量的進程,通常可以運行在任何的mongo集群服務器上。



    使用mongo集群需要注意對數據的統計,如果一個分片移動正在進行,那么在兩個分片都會保存該數據,直到移動完成,才會在原有分片上將數據刪除。所以如果分片不合理造成頻繁的移動,那么極有可能是統計出很多多余的數據。

    另外,如果需要對數據超過一個字段進行唯一性驗證,通常我們設置了一個字段索引,并按照該字段索引進行分片,這時針對另外一個需要唯一性的字段,寫入時必須要檢測是否已經存在,假設有兩個應用程序進程,同時檢測,這時會得到都沒有的結果,然后同時寫入,導致重復字段。解決的方式是必須在寫前對所有集群加鎖,但會嚴重影響集群的性能。

    總結

    以上是生活随笔為你收集整理的【MongoDB】Sharding分片概念及原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。