NOSQL《二》之MongoDB的加強

來源:互聯網
上載者:User

標籤:

問題?使用MongoDB操作叢集、主從複製、複本集、分布式儲存的概念,Java調用MongoDB

一、叢集概念和使用

多態電腦,對外服務,處理負載平衡的問題。

叢集是一組相互獨立的、通過高速網路互聯的電腦,它們構成了一個組,並各自可以對外服務。


二、主從複製概念和使用

怎麼理解呢?也就是主伺服器上做什麼,從伺服器上也得做什麼。

            


主的配置(只能執行事務操作)
從的配置(只能執行讀的操作,不能執行事務操作)

分別登入到這兩個伺服器,開兩個cmd即可

   

往主伺服器中事務操作,而從伺服器執行讀操作(只能做讀操作),查看資料同步性



缺點:沒有故障恢複的功能


三、複本集概念和使用

複本集就是有自動故障恢複功能的主從叢集。

主從叢集複本集最大的區別就是複本集沒有固定的“主節點”整個叢集會選出一個“主節點”,當其故障後,又在剩下的從節點中選中其他節點為“主節點”繼續對外服務,遮掩過得一種方式可以實現7*24連續服務工作,複本集總有一個活躍點(primary)和一個或多個備份節點(secondary)。


       

建立節點集:首先建立檔案夾mongodb/logs/node1、node2、node3 and mongodb/logs/dbs/ node1、node2、node3


//以三個節點為例:

節點1:

HOST:localhost:10001

Log File:D:\mongodb\logs\node1\logs.txt

Data File:D:\mongodb\dbs\node1

節點2:

HOST:localhost:10002

Log File:D:\mongodb\logs\node2\logs.txt

Data File:D:\mongodb\dbs\node2

節點3:

HOST:localhost:10003

Log File:D:\mongodb\logs\node3\logs.txt

Data File:D:\mongodb\dbs\node3


啟動節點:

開啟三個cmd

//啟動節點1:mongod --dbpath D:\mongodb\dbs\node1 --logpath D:\mongodb\logs\node1\logs.txt --logappend --port 10001 --replSet itcast/localhost:10002  --master//啟動節點2:mongod --dbpath D:\mongodb\dbs\node2 --logpath D:\mongodb\logs\node2\logs.txt --logappend --port 10002 --replSet itcast/localhost:10001//啟動節點3:  mongod --dbpath D:\mongodb\dbs\node3 --logpath D:\mongodb\logs\node3\logs.txt --logappend --port 10003 --replSet itcast/localhost:10001,localhost:10002

另外開cmd登入服務,並初始化三個節點


查看本節點是不是主節點

    

做插入操作,看看是否資料同步了,還是一樣只有主節點才能進行事務操作。

然後在其中掛掉一個,再看看那個作為了主節點,並可進行事務操作,優先順序頂上來。

     




四、分布式儲存概念和使用主要是為了減小資料庫資料量大的壓力,分壓的作用,具體概念百度有
      

建立三個分布式節點檔案夾(我是放在三個盤符裡的)

建立一個普通節點(也是放在盤符裡的),存放配置資訊(路由識別)

 先啟動配置節點

     

起一個路由節點,並且串連配置節點:


剩下的就是分布式三個節點

第一個節點:


第二個節點:


第三個節點:


現在要把三個節點放在配置節點中初始化,相當於配置:

登入路由節點服務,進入配置會自動存入配置節點之中,之前他們關聯了。

初始化三個節點



AllowLocal:true  :表示不用通過路由也可以串連到這三個分布式節點,進行訪問


並且key指明age為分區,shardcollection指明需要分布儲存的集合是那個,添加1000萬個文檔



然後分別起三個用戶端串連三個分布式節點,就可以看到資料如下:
都會是一個test.Person集合,路由會根據自己的判斷通過age分區,均衡三個分布式節點儲存資料,最後訪問資料。




五、java調用MongoDB

匯入包:mongo-2.10.1.jar

package com.itcast.mongodbDao;import java.net.UnknownHostException;import org.bson.types.ObjectId;import org.junit.Test;import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.Mongo;import com.mongodb.util.JSON;public class MongoDBDao {@Testpublic void testAdd() throws UnknownHostException {Mongo mongo = new Mongo("localhost", 27017);DB db = mongo.getDB("test");DBCollection collection = db.getCollection("person");BasicDBObject dbObject = new BasicDBObject();dbObject.put("name", "李大san1");dbObject.put("descr", "人生友誼");collection.insert(dbObject);mongo.close();}@Testpublic void find() throws UnknownHostException {Mongo mongo = new Mongo("localhost", 27017); //查詢所有的DatabaseSystem.out.println("查詢所有的Database");for(String name:mongo.getDatabaseNames()){System.out.println(name);}//查詢所有的聚集集合System.out.println("查詢所有的聚集集合");DB db = mongo.getDB("test");for(String name:db.getCollectionNames()){System.out.println(name);}System.out.println("查詢所有的資料");DBCollection collection = db.getCollection("person");DBCursor cursor = collection.find();while (cursor.hasNext()) {DBObject object = cursor.next();System.out.println(object.toString());System.out.println(object.get("name"));}System.out.println("文檔數:"+cursor.count());System.out.println("ID:"+cursor.getCursorId());System.out.println("JSON資料:"+JSON.serialize(cursor));mongo.close();}@Testpublic void delete() throws UnknownHostException{Mongo mongo = new Mongo("localhost", 27017);DB db = mongo.getDB("test");DBCollection collection = db.getCollection("person");BasicDBObject dbObject = new BasicDBObject();dbObject.put("name", "李大san1");collection.remove(dbObject);}@Testpublic void update() throws UnknownHostException{Mongo mongo = new Mongo("localhost", 27017);DB db = mongo.getDB("test");DBCollection collection = db.getCollection("person");BasicDBObject dbObject = new BasicDBObject();dbObject.put("name", "李大junjun");collection.update(new BasicDBObject("_id",new ObjectId("5741c13f8c89776a5081a962")), dbObject, true, true);//第一個true如果資料庫不存在,是否添加,第二個true只修改第一天,true如果有多條是否修改}}

六、總結   在本文中,對概念沒有介紹太多,主要是是對操作注重,還有對整個流程的理解。叢集,主從複製、複本集、分布式儲存概念一定要弄懂,從實web的在面試匯總經常問到。


NOSQL《二》之MongoDB的加強

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.