亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: MongoDB 集群 [打印本頁]

作者: cu_Cbear    時間: 2012-02-22 15:52
標(biāo)題: MongoDB 集群
MongoDB 集群



本文是一篇轉(zhuǎn)載文章,作者對MongoDB集群結(jié)構(gòu),集群中各個角色的功能和基本原理做了詳細(xì)地圖文并茂地講解,值得一看。

原文鏈接:http://www.javabloger.com/article/mongodb-cluster.html

MongoDB 集群中包含一個自動分片模塊 (“mongos”). 自動分片可以用于構(gòu)建一個大規(guī)模的可擴(kuò)展的數(shù)據(jù)庫集群,這個集群可以并入動態(tài)增加的機(jī)器。自動建立一個水平擴(kuò)展的數(shù)據(jù)庫集群系統(tǒng),將數(shù)據(jù)庫分表存儲在sharding的各個節(jié)點(diǎn)上。在一個mongodb的集群中包括一些shards(mongod進(jìn)程),mongos的路由進(jìn)程,一個或多個config服務(wù)器。sharding是一種對大規(guī)模數(shù)據(jù)存儲的一種策略,關(guān)于sharding的詳細(xì)信息可以查看這里。也許有人會問,為什么需要做這種策略,因?yàn)樵谝粋大型系統(tǒng)中最后的瓶頸會落在網(wǎng)絡(luò)的帶寬和磁盤的讀寫上,如果將數(shù)據(jù)分布在多個機(jī)器上的多個磁盤上,將會系統(tǒng)數(shù)據(jù)的處理能有所提高。

MongoDB 集群的結(jié)構(gòu):
下圖中Shard是指每個節(jié)點(diǎn)的shard有一個或更多的服務(wù)器和存儲數(shù)據(jù)的mongod進(jìn)程,而mongod是MongoDB數(shù)據(jù)的核心進(jìn)程。

每臺機(jī)器上的mongod從配置獲取服務(wù)器(元數(shù)據(jù)metadata ),然后,當(dāng)收到客戶端請求時,它請求路由到相應(yīng)的服務(wù)器組和編譯結(jié)果發(fā)送回客戶端。

mongos進(jìn)行可以被看作是一個路由和協(xié)調(diào)的過程,因?yàn)樗梢允沟妹總單一的各個節(jié)點(diǎn)組成一個集群系統(tǒng)。 另外還需要強(qiáng)調(diào)一點(diǎn)mongos進(jìn)程沒有持久狀態(tài),每個實(shí)例都需要一定的數(shù)據(jù)存儲的內(nèi)存空間。

換而言之,所謂MongoDB 集群也就是 MongoDB做了一個數(shù)據(jù)庫路由的策略,而且保證跨庫操作的數(shù)據(jù)庫事務(wù),而MongoDB 集群中的關(guān)鍵部分Sharding不是一門新技術(shù),而是一種策略,關(guān)鍵還是看應(yīng)用場景和案例提供的可用性,因?yàn)镾harding不僅僅是MongoDB 集群中所提到的分布在不同的機(jī)器上,還可以分表,分區(qū),分?jǐn)?shù)據(jù),等等。



MongoDB 集群的工作原理:

其中有一個服務(wù)器上存儲著集群的metadata信息,包括每個服務(wù)器,每個shard的基本信息和chunk信息Config Server 主要存儲的是chunk信息。每一個config服務(wù)器都復(fù)制了完整的chunk信息,就是下圖中左邊黃色的部分。

如果客戶端對集群的MongoDB插入一條數(shù)據(jù),客戶端并不知道剛剛插入的數(shù)據(jù)被分配到具體哪個MongoDB節(jié)點(diǎn)上了,因?yàn)楫?dāng)一條數(shù)據(jù)被傳入 MongoDB集群中通過mongos路由,所以我們并感覺不到是數(shù)據(jù)存放在哪個shard的 chunk上,但是通過后臺的Sharding的管理命令可以看到插入的數(shù)據(jù)存放在哪個節(jié)點(diǎn)上。



配置MongoDB集群


模擬2個shard服務(wù)、一個config服務(wù)、一個mongos process,全部運(yùn)行在一個測試的服務(wù)器上,具體配置步驟如下:
口水: –shardsvr 是表示以sharding模式啟動Mongodb服務(wù)器,Mongodb數(shù)據(jù)同步方式參見我寫的另外一篇文章“MongoDB 主(Master)/從(Slave)數(shù)據(jù)同步 ”

  1. $ mkdir /data/db/a
  2. $ mkdir /data/db/b
  3. $ mkdir /data/db/config
  4. $ ./mongod –shardsvr –dbpath /data/db/a –port 10000 > /tmp/sharda.log &
  5. $ cat /tmp/sharda.log
  6. $ ./mongod –shardsvr –dbpath /data/db/b –port 10001 > /tmp/shardb.log &
  7. $ cat /tmp/shardb.log
  8. $ ./mongod –configsvr –dbpath /data/db/config –port 20000 > /tmp/configdb.log &
  9. $ cat /tmp/configdb.log
  10. $ ./mongos –configdb localhost:20000 > /tmp/mongos.log &
  11. $ cat /tmp/mongos.log

  12. $ # we connect to mongos process
  13. $ ./mongo
  14. MongoDB shell version: 1.1.0-
  15. url: test
  16. connecting to: test
  17. type "help" for help
  18. > use admin
  19. switched to db admin
  20. > db.runCommand( { addshard : "localhost:10000", allowLocal : true } )
  21. {"ok" : 1 , "added" : "localhost:10000"}
  22. > db.runCommand( { addshard : "localhost:10001", allowLocal : true } )
  23. {"ok" : 1 , "added" : "localhost:10001"}

  24. > config = connect("localhost:20000")
  25. > config = config.getSisterDB("config")

  26. > test = db.getSisterDB("test")
  27. test

  28. > db.runCommand( { enablesharding : "test" } )
  29. {"ok" : 1}
  30. > db.runCommand( { shardcollection : "test.people", key : {name : 1} } )
  31. {"ok" : 1}

  32. > db.runCommand({listshards:1})
  33. {"servers" : [{"_id" :  ObjectId( "4a9d40c981ba1487ccfaa634")  , "host" : "localhost:10000"},
  34. {"_id" :  ObjectId( "4a9d40df81ba1487ccfaa635")  , "host" : "localhost:10001"}] ,
  35. "ok" : 1}
  36. >
復(fù)制代碼
BTW:
MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,MongoDB的數(shù)據(jù)結(jié)構(gòu)非常松散,他的數(shù)據(jù)格式類似json的bjson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。

另外,Mongo最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。

Mongo還可以解決海量數(shù)據(jù)的查詢效率,根據(jù)官方文檔,當(dāng)數(shù)據(jù)量達(dá)到50GB以上數(shù)據(jù)時,Mongo數(shù)據(jù)庫訪問速度是MySQL10 倍以上。對于這點(diǎn)我將來會去做些試驗(yàn)來進(jìn)行證明。

每個節(jié)點(diǎn)上都是單點(diǎn)的,不知道MongoDB Sharding+Replication是什么效果,因?yàn)楸簧⒘械姆⻊?wù)器還是存在著單點(diǎn)的現(xiàn)象,如果其中一個散列的節(jié)點(diǎn)壞點(diǎn)那么數(shù)據(jù)就不存在了。下面還要試試這2種方式的結(jié)合。

相關(guān)文章:
MongoDB 主(Master)/從(Slave)數(shù)據(jù)同步
Java操作 MongoDB NoSQL數(shù)據(jù)庫

作者: 清風(fēng)鳥兒    時間: 2012-02-24 17:33
謝謝分享




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2