<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                在mongodb里面存在另一種集群,就是分片技術,跟sql server的表分區類似,我們知道當數據量達到T級別的時候,我們的磁盤,內存就吃不消了,針對這樣的場景我們該如何應對。 ## 分片 mongodb采用將集合進行拆分,然后將拆分的數據均攤到幾個片上的一種解決方案。圖例分析: <!--more--> ``` 從服務器1 從服務器2 \ / 路由服務器mongods <——> config服務器 | | 客戶端 ``` 下面我對這張圖解釋一下: `客戶端`:客戶端肯定說,你數據庫分片不分片跟我沒關系,我叫你干啥就干啥,沒什么好商量的。 `mongos`:首先我們要了解”片鍵“的概念,也就是說拆分集合的依據是什么?mongos就是一個路由服務器,它會根據管理員設置的“片鍵”將數據分攤到自己管理的mongod集群,數據和片的對應關系以及相應的配置信息保存在"config服務器"上。 `從服務器`:一個普通的數據庫實例,如果不分片的話,我們會直接連上mongod。 ## 實戰 首先我們準備4個mongodb程序,我這里是均攤在C,D,E,F盤上,當然你也可以做多個文件夾的形式(下面將采用目錄的形式mongodb、mongodb2、mongodb3、mongodb4對應C,D,E,F盤)。 mongodb ---config --port 2222 mongodb1 ---mongos --port 3333 mongodb2 ---mongod --port 4444 mongodb3 ---mongod --port 5555 1:開啟config服務器 先前也說了,mongos要把mongod之間的配置放到config服務器里面,理所當然首先開啟它,我這里就建立2222端口。 ``` D:\Projects\mongodb\bin>mongod --dbpath=D:\Projects\mongodb\db --port 2222 ``` 2: 開啟mongos服務器 這里要注意的是我們開啟的是mongos,不是mongod,同時指定下config服務器,這里我就開啟D盤上的mongodb,端口3333。 ``` D:\Projects\mongodb2\bin>mongos --port 3333 --configdb=127.0.0.1:2222 ``` 3:啟動mongod服務器 對分片來說,也就是要添加片了,這里開啟E,F盤的mongodb,端口為:4444,5555。 ``` mongod --dbpath=D:\Projects\mongodb3\db --port 4444 mongod --dbpath=D:\Projects\mongodb4\db --port 5555 2015-07-04T10:34:15.394+0800 I NETWORK [initandlisten] waiting for connections on port 4444 2015-07-04T10:35:35.372+0800 I NETWORK [initandlisten] waiting for connections on port 5555 ``` 4: 服務配置 a. 先前圖中也可以看到,我們client直接跟mongos打交道,也就說明我們要連接mongos服務器,然后將4444,5555的mongod交給mongos,添加分片也就是addshard()。 ``` D:\Projects\mongodb\bin>mongo 127.0.0.1:3333/admin connecting to: 127.0.0.1:3333/admin mongos> mongos> db.runCommand({"addshard":"127.0.0.1:4444","allowLocal":true}) { "shardAdded" : "shard0000", "ok" : 1 } mongos> db.runCommand({"addshard":"127.0.0.1:5555","allowLocal":true}) { "shardAdded" : "shard0001", "ok" : 1 } ``` 這里要注意的是,在addshard中,我們也可以添加副本集,這樣能達到更高的穩定性。 b. 片已經集群了,但是mongos不知道該如何切分數據,也就是我們先前所說的片鍵,在mongodb中設置片鍵要做兩步: 1)開啟數據庫分片功能,命令很簡單 enablesharding(),這里我就開啟test數據庫。 2)指定集合中分片的片鍵,這里我就指定為test.montest.name字段。 ``` db.runCommand({"enablesharding":"test"}) db.runCommand({"shardcollection":"test.montest", "key":{"name":1}}) ``` 5: 查看效果 好了,至此我們的分片操作全部結束,接下來我們通過mongos向mongodb插入1w記錄,然后通過printShardingStatus命令 查看mongodb的數據分片情況。 ``` for(var i=0;i<10000;i++){ db.montest.insert({"name":"yjc"+i, "age":i}); } mongos> db.montest.count() 10000 mongos> db.printShardingStatus() --- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("559745db7ba8ba85959c9bfb") } shards: { "_id" : "shard0000", "host" : "127.0.0.1:4444" } { "_id" : "shard0001", "host" : "127.0.0.1:5555" } balancer: Currently enabled: yes Currently running: no Failed balancer rounds in last 5 attempts: 0 Migration Results for the last 24 hours: 1 : Success databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : true, "primary" : "shard0000" } test.montest shard key: { "name" : 1 } chunks: shard0000 2 shard0001 1 { "name" : { "$minKey" : 1 } } -->> { "name" : "yjc1" } on : shard0001 Timestamp(2, 0) { "name" : "yjc1" } -->> { "name" : "yjc6" } on : shard0000 Timestamp(2, 1) { "name" : "yjc6" } -->> { "name" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 3) ``` 這里主要看三點信息: 1)shards:我們清楚的看到已經別分為兩個片了,shard0000和shard0001。 2)databases: 這里有個partitioned字段表示是否分區,這里清楚的看到test已經分區。 3)chunks:這個很有意思,我們發現集合被砍成四段: 無窮小 —— yjc , yjc1 —— yjc6, yjc6 —— 無窮大。 分區情況為:2:1,從后面的 on shardXXXX也能看得出。 ## 后記 問題: 1 在現有的數據庫上做分片,怎么做? 2 一個分片Mongod進程掛掉了,是不是整個集合的查詢就沒有意義了啊? 發現只要有一個分片掛了,就查詢不了數據了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看