Мониторинг Mongo на предмет изменений с помощью Node.js - PullRequest
27 голосов
/ 22 июня 2010

Я использую Node.js для некоторых работ по проекту, и я хотел бы отслеживать изменения в моей базе данных (коллекции) Mongo, в основном вызывать событие, если что-то добавляется.

Кто-нибудь знает, возможно ли это? Я использую драйверы node-mongodb-native .

Если это не так, я бы также хотел, чтобы любые доступные указатели при отправке данных с сервера (запускаются с node) в клиентский браузер.

Ответы [ 4 ]

3 голосов
/ 27 июля 2010

Я бы включил репликацию в вашем mongodb. Есть копия? база данных, которая содержит список изменений, аналогично журналу репликации mysql. Вы можете следить за этим.

-daniel

3 голосов
/ 05 июля 2010

Вопрос в том, будут ли все данные добавлены в вашу базу данных через ваше приложение node.js. Если это так, вы можете использовать класс EventEmitter для node.js, чтобы вызвать событие (http://nodejs.org/api.html#eventemitter-14).

Если база данных заполнена каким-либо другим приложением, все становится сложнее. В этом случае вам понадобится что-то вроде триггера базы данных, а это AFAIK, который еще не доступен в MongoDB.

Передача событий клиенту (он же Comet) станет возможной после того, как API веб-сокетов HTML 5 появится во всех основных браузерах.

В то же время вы можете попытаться эмулировать это поведение, используя такие методы, как (долгосрочный) опрос AJAX, навсегда фрейм и т. Д., Но у каждого из них есть свои недостатки.

1 голос
/ 01 июля 2013

Почти 3 года с момента последнего ответа.Я бы посоветовал взглянуть на:

npm install mubsub должны вас туда добраться

0 голосов
/ 08 октября 2010

collection.insert ({"key1": val1, "key2": "val2"}, функция (err, info) {
if (err) {// обработать это} else {if (info) {

Вы вызываете функцию fireandforget (info), здесь можно писать в журналы или отправлять в SQS или выполнять какие-то другие дочерние спавны или в процессе. Это может быть даже обратный вызов, но я думаю, что запуск и забывание могут сделатьв большинстве случаев. Я говорю «уволить и забыть», потому что полагаю, что вам не нужно задерживать ответ, чтобы вы могли вернуть клиенту все, что вам нужно. И частично ответив на другой вопрос, вы можете вернуть JSON следующим образом

         db.close();
         var myJSON =[];                            
         sys.puts("Cool info stored and did a non blocking fire and forget for some other mongo monitoring stuff/process and sending control back to the browser");
         sys.puts(sys.inspect(info));//remove later
         myJSON.push({"status":"success"});                     
         myJSON.push({"key1":val1,"key2":val2});//or whatev you want to send
         res.writeHead(200, { "Content-Type" : "text/plain" });
         res.write(JSON.stringify(myJSON));
         res.end();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...