MongoDB 分片

来源:http://www.cnblogs.com/tartis/archive/2016/04/14/5391824.html
-Advertisement-
Play Games

分片 在Mongodb裡面存在另一種集群,就是分片技術,可以滿足MongoDB數據量大量增長的需求。 當MongoDB存儲海量的數據時,一臺機器可能不足以存儲數據也足以提供可接受的讀寫吞吐量。這時,我們就可以通過在多台機器上分割數據,使得資料庫系統能存儲和處理更多的數據。 為什麼使用分片 複製所有的 ...


分片

在Mongodb裡面存在另一種集群,就是分片技術,可以滿足MongoDB數據量大量增長的需求。

當MongoDB存儲海量的數據時,一臺機器可能不足以存儲數據也足以提供可接受的讀寫吞吐量。這時,我們就可以通過在多台機器上分割數據,使得資料庫系統能存儲和處理更多的數據。


為什麼使用分片

  • 複製所有的寫入操作到主節點
  • 延遲的敏感數據會在主節點查詢
  • 單個副本集限制在12個節點
  • 當請求量巨大時會出現記憶體不足。
  • 本地磁碟不足
  • 垂直擴展價格昂貴

MongoDB分片

下圖展示了在MongoDB中使用分片集群結構分佈:

上圖中主要有如下所述三個主要組件:

  • Shard:

    用於存儲實際的數據塊,實際生產環境中一個shard server角色可由幾台機器組個一個relica set承擔,防止主機單點故障

  • Config Server:

    mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk信息。

  • Query Routers:

    前端路由,客戶端由此接入,且讓整個集群看上去像單一資料庫,前端應用可以透明使用。


分片實例

分片結構埠分佈如下:

Shard Server 127020
Shard Server 227021
Shard Server 327022
Shard Server 427023
Config Server 27100
Route Process40000

步驟一:啟動Shard Server

[root@100 /]# mkdir -p /www/mongoDB/shard/s0
[root@100 /]# mkdir -p /www/mongoDB/shard/s1
[root@100 /]# mkdir -p /www/mongoDB/shard/s2
[root@100 /]# mkdir -p /www/mongoDB/shard/s3
[root@100 /]# mkdir -p /www/mongoDB/shard/log
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork
....
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27023 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork

步驟二: 啟動Config Server

[root@100 /]# mkdir -p /www/mongoDB/shard/config
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork

註意:這裡我們完全可以像啟動普通mongodb服務一樣啟動,不需要添加—shardsvr和configsvr參數。因為這兩個參數的作用就是改變啟動埠的,所以我們自行指定了埠就可以。

步驟三: 啟動Route Process

/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500

mongos啟動參數中,chunkSize這一項是用來指定chunk的大小的,單位是MB,預設大小為200MB.

步驟四: 配置Sharding

接下來,我們使用MongoDB Shell登錄到mongos,添加Shard節點

[root@100 shard]# /usr/local/mongoDB/bin/mongo admin --port 40000
MongoDB shell version: 2.0.7
connecting to: 127.0.0.1:40000/admin
mongos> db.runCommand({ addshard:"localhost:27020" })
{ "shardAdded" : "shard0000", "ok" : 1 }
......
mongos> db.runCommand({ addshard:"localhost:27029" })
{ "shardAdded" : "shard0009", "ok" : 1 }
mongos> db.runCommand({ enablesharding:"test" }) #設置分片存儲的資料庫
{ "ok" : 1 }
mongos> db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})
{ "collectionsharded" : "test.log", "ok" : 1 }

步驟五: 程式代碼內無需太大更改,直接按照連接普通的mongo資料庫那樣,將資料庫連接接入介面40000


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 官網上面的例子是在phoenix-4.6.0-HBase-1.1-client.jar完成的,這個jar包含了phoenix4.6連接hbase1.1.2所有的依賴,真是包羅萬象(裡面竟然還包括了servlet)。如下圖: 如果把這個jar放入到工程中,必然與現有工程諸多jar產生衝突。 經查找資料... ...
  • 寫在前面的話:之前做的一個項目,資料庫及系統整體構架設計完成之後,和弟兄們經過 一段時間的編碼,系統如期上線,剛開始運行一切良好,後來隨著數據量的急劇膨脹,慢慢出現了很多莫名其妙的問題,經過調試,修改了資料庫中幾個存儲過程的 一些問題。有意思的是,有一個存儲過程里,為了實現一個小的功能,寫了好多好多 ...
  • 介紹 本篇文章主要介紹在插入數據到表中遇到鍵重覆避免插入重覆值的處理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE;接下來就分別看看這三種方式的處理辦法。 IGNORE 使用ignore當插入的值遇到主鍵(PRIMARY KEY)或者唯一鍵(UNIQUE ...
  • 今天我們就來看一下資料庫的各種命令,以下命令全部是從CMD命令視窗下的命令行輸入指令,首先如果如果輸入mysql,系統提示“mysql不是內部命 令或外部命令。那麼這其實是環境變數沒有設置好的原因,例如我的mysql的安裝目錄是C:\news\mySql,則在環境變數中的系統變數PATH路 徑中輸入 ...
  • 看了很久博客園的博客,今天有點小衝動,寫一個小小分享,歡迎吐槽,O(∩_∩)O哈哈~ 背景: 微信活動小游戲開發,游戲中需要不斷的恢復體力值,體力相關數據都存儲在redis中。 需求: 1.當日首次登錄,增加全部體力值; 2.周期性增加定額體力值; 實現方案1(全量更新): 出於用戶量小、簡單的考慮 ...
  • 系統是cenos6.7 64位的,預設mysql5.7.11下載到/usr/local/src,安裝目錄在/app/local/mysql目錄下,mysql數據放置目錄/app/local/data。mysql從5.1後採用cmake方式編譯安裝,所以要先編譯安裝cmake工具,也可以採用yum方式 ...
  • Question: 初步理解多維資料庫和關係型資料庫都是表存儲,只不過是在多維數據集里叫做事實表、維表,做分析的話關係型資料庫也可以做到的呀?(書上說多維資料庫的查詢速度更快一點,可是為什麼會更快呢?)多維資料庫和關係型資料庫單單是查詢速度上更優嗎?還有會出於什麼考慮來建多維資料庫呢? Answer ...
  • 環境配置 在 Java 程式中如果要使用 MongoDB,你需要確保已經安裝了 Java 環境及 MongoDB JDBC 驅動。 本章節實例時候 Mongo 3.x 以上版本。 你可以參考本站的Java教程來安裝Java程式。現在讓我們來檢測你是否安裝了 MongoDB JDBC 驅動。 首先你必 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...