1. 程式人生 > >MongoDB實戰-操作分片叢集,向分片叢集中寫入資料

MongoDB實戰-操作分片叢集,向分片叢集中寫入資料

       本篇文章中,我們將向分片集合寫入資料,這樣你才能觀察塊的排列和移動。這是MongoDB分片的要素。每個示例文件都表示一個電子表格,看起來是這樣的。

{
_id:ObjectId("4d6f29c0e4ef0123afdacaeb"),
filename:"sheet-1",
updated_at:new Date(),
username:"bank",
data:"RAW DATA"
}
     請注意,data欄位會包含一個5KB的字串以模擬原始資料,通過Ruby驅動向叢集中寫入文件資料。改指令碼接收一個迴圈次數作為引數,每個迴圈都會為200個使用者各插入5KB的文件,指令碼的原始碼如下:
require 'rubygems'
require 'mongo'
con=Mongo::Client.new(["localhost:40000"],:database=>'cloud-docs')
col=con[:spreadsheets]
data="abcd" * 1000
def write_user_docs(iterations=0,name_count=200,data,col)
  iterations.times do |n|
    name_count.times do |n|
      doc={:filename=>"sheet-#{n}",
           :updated_at=>Time.now.utc,
           :username=>"bank",
           :data=>data
          }
      col.insert_one(doc)
    end
  end
end


if ARGV.size == 0
  puts "Usage :insert.rb [iterations][name_count]"
else
  iterations=ARGV[0].to_i
  puts iterations
  if ARGV[1] && ARGV[1]=~/^d+$/
     name_count=ARGV[1].to_i
  else
     name_count=200
  end
  puts name_count
  write_user_docs(iterations,name_count,data,col)
end

    在伺服器上執行ruby insert.rb。執行插入時截圖如下:


執行結束後,分別檢視兩個分片,連線mongo -port 30001和mongo -port 30100,連線了shard-a的從節點,和shard-b的主節點。分別查詢分片中對應的文件個數。shard-a從節點查詢結果如下圖



shard-b的主節點查詢文件結果如下:


根據結果分析,發現shars-a的分片上儲存了198個文件,shard-b的分片上儲存了2個文件。實現了資料的分片操作。

若再次執行insert.rb指令碼,執行完成後,再次檢視shard-a和shard-b。發現shard-a的文件數為398,shard-b的文件數為2