Meteor.js와 함께 여러 Mongodb 데이터베이스 사용
2명 가능합니까?Meteor.Collections
두 개의 다른 mongdb 데이터베이스 서버에서 데이터를 검색하고 있습니까?
Dogs = Meteor.Collection('dogs') // mongodb://192.168.1.123:27017/dogs
Cats = Meteor.Collection('cats') // mongodb://192.168.1.124:27017/cats
갱신하다
이제 원격/여러 데이터베이스에 연결할 수 있습니다.
var database = new MongoInternals.RemoteCollectionDriver("<mongo url>");
MyCollection = new Mongo.Collection("collection_name", { _driver: database });
어디에<mongo_url>
는 다음과 같은 몽고드버럴입니다.mongodb://127.0.0.1:27017/meteor
(데이터베이스 이름 포함)
현재로서는 단 한 가지 단점이 있습니다. 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});
});
현재 Meteor 앱:
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);
다른 옵션 - 사용자 지정 mongodb 연결
노드 jsmongodb 네이티브 드라이버를 사용합니다.
이것은 마치 다른 노드 js 앱에서처럼 데이터베이스에 연결하는 것입니다.
사용 가능한 반응성이 없으므로 다음을 사용할 수 없습니다.new 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();
});
});
정답은 YES입니다. 유성을 여러 개 설정할 수 있습니다.서로 다른 mongdb 데이터베이스 서버에서 데이터를 검색하는 컬렉션입니다.
@Akshat의 대답처럼, 당신은 당신 자신의 것을 초기화할 수 있습니다.MongoInternals.RemoteCollectionDriver
예를 들어, 그것을 통해.Mongo.Collection
생성할 수 있습니다.
하지만 여기에 더 이야기할 것이 있습니다.@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
내부 전화Cursor.observeChanges
를 생성하기 위해ObserveHandle
인스턴스 - 데이터베이스에서 발생한 향후 변경 사항을 자동으로 추적합니다.
현재 두 가지 유형의 관찰자 드라이버가 있습니다. 레거시PollingObserveDriver
여론조사와 디프 전략이 필요하고, 그리고.OplogObseveDriver
데이터 변경을 모니터링하기 위해 Oplog-tailing을 효과적으로 사용합니다., 어떤것을적결위해기하정지할용,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
이 바로 가 이이우명하정이다니유입확을 지정해야 입니다.oplogUrl
을 생성하는 MongoConnection
이는 실제로 내부 인터페이스를 사용하여 가능합니다.
var d = new MongoInternals.RemoteCollectionDriver("<mongo url>");
C = new Mongo.Collection("<collection name>", { _driver: d });
언급URL : https://stackoverflow.com/questions/20535755/using-multiple-mongodb-databases-with-meteor-js
'sourcetip' 카테고리의 다른 글
루비 해시를 숫자 값으로 정렬하는 방법은 무엇입니까? (0) | 2023.06.02 |
---|---|
"원격 시스템 탐색기 작동"으로 인해 몇 초간 동결됨 (0) | 2023.06.02 |
Ruby on Rails 콜백, :before_save와 :before_create의 차이점은 무엇입니까? (0) | 2023.06.02 |
이 요청은 이 작업을 수행할 권한이 없습니다.애저블롭클라이언트 (0) | 2023.06.02 |
(셸 종료 코드로) 파일이 추적되는지 여부를 확인하는 방법은 무엇입니까? (0) | 2023.06.02 |