복붙노트

[MONGODB] MongoDB의 변경 문서에 대한 통지를 받기

MONGODB

MongoDB의 변경 문서에 대한 통지를 받기

내가 네트워크 전체 구성 스토리지로하여 MongoDB를 사용하는 것을 시도하고있다. 네트워크에있는 여러 시스템에서 동일한 응용 프로그램 실행이 각각 로컬 MongoDB의에서 구성을 가져옵니다. 그만큼 mongodbs가 동기화됩니다. 내가 뭘하고 싶은 것은 하나의 응용 프로그램이 설정 값 중 하나를 변경하면 모든 N-1 응용 프로그램에서 콜백 / 알림을 얻는 것입니다. 이런 종류의 설정이 가능합니까?

(이 / 동기화 등 자신을 네트워크 전송을하기에서 저를 저장합니다.)

해결법

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

    1.MongoDB를 아직 트리거가 없습니다, 그러나 당신은 oplog 수집 떨어져 꼬리에 응용 프로그램을 훅하고 뭔가에게 문서 (등 또는 갱신 또는 삽입)이 삭제 될 때마다 작업을 수행 할 수 있습니다

    MongoDB를 아직 트리거가 없습니다, 그러나 당신은 oplog 수집 떨어져 꼬리에 응용 프로그램을 훅하고 뭔가에게 문서 (등 또는 갱신 또는 삽입)이 삭제 될 때마다 작업을 수행 할 수 있습니다

    여기에 3 부 블로그 게시물이 작업을 수행하는 방법에 대한 도움이 될 수 있습니다 : http://www.kchodorow.com/blog/2010/10/12/replication-internals/

  2. ==============================

    2.당신은 mongodbs이 서로 연관되어 있는지 무엇을 의미합니까? 그들은 실제로 그들 자신의 사이에 데이터를 복제하고 있습니까? 당신이 그 맞추지을 관리 할 것처럼 소리 때문에 내가하지 가정합니다.

    당신은 mongodbs이 서로 연관되어 있는지 무엇을 의미합니까? 그들은 실제로 그들 자신의 사이에 데이터를 복제하고 있습니까? 당신이 그 맞추지을 관리 할 것처럼 소리 때문에 내가하지 가정합니다.

    과거에는, 나는 중앙 몽고 인스턴스 (복제 쌍 등)가 필요합니다 MongoDB를하고 ASP와 비슷한 달성했습니다. 기본적으로, 변화가 로컬 인스턴스를 만들 때마다, 중앙 인스턴스에 덮인 모음은 또한 설정 값의 새 버전과 그 값이 마지막으로 업데이트하고있는 서버 값을 업데이트 할 때의 타임 스탬프로 업데이트됩니다.

    별도의 스레드는 중앙 인스턴스에 대한 tailable 커서 개방을 유지 개별 서버에서 실행됩니다. 새 레코드가 커서에 의해 검색 될 때마다, 새로운 값은 로컬 인스턴스의 타임 스탬프와 비교하고 그에 따라 (여부) 업데이트됩니다. 그 타임 스탬프 및 업데이트 폭풍 바람하지 않는 것을 보장하기 위해 변화를 만들어 "권위있는"서버를 비교할 때주의해야합니다. 또한 누군가가 실제로하거나 값을 변경하기 때문에 업데이트가 있는지 여부를 알 필요가 있는지 여부의 값이 "복제"때문에 - 업데이트가 복제 업데이트 인 경우 중앙 인스턴스를 업데이트하지 않습니다.

  3. ==============================

    3.MongoDB를 3.6로, 당신은 지금 변화 스트림에 작업을 연결할 수 있습니다. 이렇게하면 특정 컬렉션의 변경 (예를 들어 CRUD 작업)을 청취하는 데 사용할 수있는 tailable 커서를 제공합니다.

    MongoDB를 3.6로, 당신은 지금 변화 스트림에 작업을 연결할 수 있습니다. 이렇게하면 특정 컬렉션의 변경 (예를 들어 CRUD 작업)을 청취하는 데 사용할 수있는 tailable 커서를 제공합니다.

    변화 스트림은 oplog의 상단에 내장하고 oplog을 사용하고 아무것도 액세스 할 수 있습니다. 변경 스트림을 재개하고 또한 $ 일치 $ 프로젝트로 집계 연산자를 사용할 수 있습니다 ...

    더 많은 정보를 원하시면 여기 (자바 예) : http://mongodb.github.io/mongo-java-driver/3.6/driver/tutorials/change-streams/

    그리고 여기 https://www.mongodb.com/mongodb-3.6에서 미리보기 (자바)입니다 :

    // 1. The database for reactive, real-time applications
     MongoClient mongoClient;
    
    // Create a new MongoClient with a MongoDB URI string.
    if (args.length == 0) {
    // Defaults to a localhost replicaset on ports: 27017, 27018, 27019
      mongoClient = new MongoClient(new
      MongoClientURI("mongodb://localhost:27017,localhost:27018,localhost:27019"));
    } else {
      mongoClient = new MongoClient(new MongoClientURI(args[0]));
    }
    
    // Select the MongoDB database.
    MongoDatabase database = mongoClient.getDatabase("testChangeStreams");
    database.drop();
    sleep();
    
    // Select the collection to query.
    MongoCollection<Document> collection = database.getCollection("documents");
    
    // Create the change stream cursor.
    MongoCursor<Document> cursor = collection.watch().iterator();
    

    당신은 C #으로 작업하는 경우, 예를 여기에서 찾을 수 있습니다 :

        var inventory = database.GetCollection<BsonDocument>("inventory");
    
        var document = new BsonDocument("x", 1);
        inventory.InsertOne(document);
        new Thread(() =>
        {
            Thread.Sleep(TimeSpan.FromMilliseconds(100));
            var filter = new BsonDocument("_id", document["_id"]);
            var update = "{ $set : { x : 2 } }";
            inventory.UpdateOne(filter, update);
        })
        .Start();
    
        // Start Changestream Example 2
        var options = new ChangeStreamOptions { FullDocument = ChangeStreamFullDocumentOption.UpdateLookup };
        var enumerator = inventory.Watch(options).ToEnumerable().GetEnumerator();
        enumerator.MoveNext();
        var next = enumerator.Current;
        enumerator.Dispose();
        // End Changestream Example 2
    
        var expectedFullDocument = document.Set("x", 2);
        next.FullDocument.Should().Be(expectedFullDocument);
    
  4. from https://stackoverflow.com/questions/10014839/get-notification-for-changed-documents-in-mongodb by cc-by-sa and MIT license