복붙노트

[MONGODB] Meteor.js와 여러 MongoDB의 데이터베이스를 사용하여

MONGODB

Meteor.js와 여러 MongoDB의 데이터베이스를 사용하여

그것은 2 개 개의 다른 MongoDB를 데이터베이스 서버에서 데이터를 검색 할 2 Meteor.Collections 수 있습니까?

Dogs = Meteor.Collection('dogs')        // mongodb://192.168.1.123:27017/dogs
Cats = Meteor.Collection('cats')        // mongodb://192.168.1.124:27017/cats

해결법

  1. ==============================

    1.원격 / 여러 데이터베이스에 연결하는 것이 가능합니다 :

    원격 / 여러 데이터베이스에 연결하는 것이 가능합니다 :

    var database = new MongoInternals.RemoteCollectionDriver("<mongo url>");
    MyCollection = new Mongo.Collection("collection_name", { _driver: database });
    

    여기서 는 MongoDB를 URL 등 MongoDB를 같은 : //127.0.0.1 : 27017 / 유성 (데이터베이스 이름)

    현재이 하나의 단점이있다 : 없음 Oplog

    현재이 불가능합니다. 각 유성 응용 프로그램은 하나의 데이터베이스에 바인딩됩니다.

    거기 당신이 주위에 얻을 수있는 몇 가지 방법이 있습니다하지만 더 그 가치 있음을 복잡하게 할 수있다 :

    다른 유성 응용 프로그램에서 (예를 동일한 시스템에 포트 6000에서 실행). 당신은 여전히 ​​반응성을 가질 수 있지만 메서드 호출을 통해 프록시 삽입, 제거하고 업데이트 필요

    섬기는 사람:

    Cats = Meteor.Collection('cats')
    
    Meteor.publish("cats", function() {
        return Cats.find();
    });
    
    Meteor.methods('updateCat, function(id, changes) {
        Cats.update({_id: id}, {$set:changes});
    });
    

    현재 유성 응용 프로그램 :

    var connection = DDP.connect("http://localhost:6000");
    
    connection.subscribe("cats");
    Cats = Meteor.Collection('cats', {connection: connection});
    
    //To update a collection
    Cats.call("updateCat", <cat_id>, <changes);
    

    이 노드 JS 네이티브 드라이버를 MongoDB를 사용합니다.

    이것은 당신이 다른 노드 JS 응용 프로그램에서하는 것처럼 데이터베이스에 연결됩니다.

    이 가능한 반응성이 없으며 새 Meteor.Collection 형식의 컬렉션을 사용할 수 없습니다.

    var mongodb = Npm.require("mongodb"); //or var mongodb = Meteor.require("mongodb") //if you use npm package on atmosphere
    
    var db = mongodb.Db;
    var mongoclient = mongodb.MongoClient;
    var Server = mongodb.Server;
    
    var db_connection = new Db('cats', new Server("127.0.0.1", 27017, {auto_reconnect: false, poolSize: 4}), {w:0, native_parser: false});
    
    db.open(function(err, db) {
        //Connected to db 'cats'
    
        db.authenticate('<db username>', '<db password>', function(err, result) {
          //Can do queries here
          db.close();
       });
    });
    
  2. ==============================

    2.이것은 내부 인터페이스를 사용하여, 실제로 가능하다 :

    이것은 내부 인터페이스를 사용하여, 실제로 가능하다 :

    var d = new MongoInternals.RemoteCollectionDriver("<mongo url>");
    C = new Mongo.Collection("<collection name>", { _driver: d });
    
  3. ==============================

    3.대답은 YES이다 : 그것은 다른 mongdb 데이터베이스 서버에서 데이터를 검색 할 여러 Meteor.Collections까지 가능 세트입니다.

    대답은 YES이다 : 그것은 다른 mongdb 데이터베이스 서버에서 데이터를 검색 할 여러 Meteor.Collections까지 가능 세트입니다.

    @Akshat에서 답으로, 당신은 Mongo.Collections를 생성 할 수있는 자신의 MongoInternals.RemoteCollectionDriver 인스턴스를 초기화 할 수 있습니다.

    그러나 여기에 대한 이야기에 더 뭔가. @Akshat 대답에 반대이기 때문에, 나는 Oplog 지원은 여전히 ​​상황에서 사용할 수 있는지 찾을 수 있습니다.

    사용자 정의 MongoInternals.RemoteCollectionDriver를 초기화 할 때, Oplog URL을 지정하는 것을 잊지 마십시오 :

    var driver = new MongoInternals.RemoteCollectionDriver(
        "mongodb://localhost:27017/db", 
        {
          oplogUrl: "mongodb://localhost:27017/local"
        });
    var collection = new Mongo.Collection("Coll", {_driver: driver});
    

    이와 같이, 그것을 Oplog 지원을 활성화하기 매우 간단하다. 당신은 코드의 두 줄 아래에 무슨 일이 있었는지 알고 싶은 경우, 당신은 게시물의 나머지 부분을 계속해서 읽어주십시오.

    RemoteCollectionDriver의 생성자에서 기초 MongoConnection가 생성됩니다 :

    MongoInternals.RemoteCollectionDriver = function (
      mongo_url, options) {
      var self = this;
      self.mongo = new MongoConnection(mongo_url, options);
    }; 
    

    까다로운 부분이다 : MongoConnection가 oplogUrl가 OplogHandle 초기화한다 제공로 생성하고, 꼬리 Oplog (소스 코드)을 개시하는 경우 :

    if (options.oplogUrl && ! Package['disable-oplog']) {  
      self._oplogHandle = new OplogHandle(options.oplogUrl, self.db.databaseName);
      self._docFetcher = new DocFetcher(self);
    }
    

    이 블로그 설명했듯이 : Meteor.publish 내부적으로 자동으로 향후 변경이 데이터베이스에서 발생 추적하는 ObserveHandle 인스턴스를 만들 Cursor.observeChanges를 호출합니다.

    설문 조사 및-DIFF 전략을 취 기존 PollingObserveDriver 및 OplogObseveDriver, 효율적으로 데이터 변경 사항을 모니터링 할 수 Oplog - 미행을 사용 : 현재 관찰자 드라이버의 두 종류가 있습니다. 적용 할 일을 결정하기 위해, observeChanges는 다음 절차 (소스 코드)를 취합니다

    var driverClass = canUseOplog ? OplogObserveDriver : PollingObserveDriver;
    observeDriver = new driverClass({
      cursorDescription: cursorDescription,
      mongoHandle: self,
      multiplexer: multiplexer,
      ordered: ordered,
      matcher: matcher,  // ignored by polling
      sorter: sorter,  // ignored by polling
      _testOnlyPollCallback: callbacks._testOnlyPollCallback
    });
    

    canUseOplog 사실 수 있도록하기 위해, 몇 가지 요구 사항이 충족되어야한다. 베어 최소 하나입니다 : 기본 MongoConnection 인스턴스가 유효한 OplogHandle이 있어야합니다. 이 MongoConnection을 만드는 동안 우리가 oplogUrl를 지정해야 정확한 이유입니다

  4. from https://stackoverflow.com/questions/20535755/using-multiple-mongodb-databases-with-meteor-js by cc-by-sa and MIT license