2010-06-21 13 views
27

Używam Node.js dla niektórych prac projektowych i chciałbym monitorować moją bazę danych Mongo (kolekcja) dla zmian, w zasadzie wystrzelić wydarzenie, jeśli coś zostanie dodane.Monitorowanie Mongo dla zmian z Node.js

Ktoś wie, czy to jest możliwe? Używam sterowników node-mongodb-native.

Jeśli nie, chciałbym także, aby dostępne wskaźniki na temat przesyłania danych z serwera (uruchamiane z node) do przeglądarki klienta.

Odpowiedz

3

Pytanie dotyczy tego, czy wszystkie dane są dodawane do bazy danych za pośrednictwem aplikacji node.js. Jeśli tak, możesz użyć klasy EventEmitter obiektu node.js, aby wywołać zdarzenie (http://nodejs.org/api.html#eventemitter-14).

Jeśli baza danych jest zapełniona przez inną aplikację, sprawy stają się trudne. W takim przypadku potrzebujesz czegoś takiego jak wyzwalacz bazy danych, który jest AFAIK jeszcze niedostępny w MongoDB.

Przesyłanie zdarzeń do klienta (alias Comet) będzie możliwe po przejściu interfejsu API HTML5 do wszystkich głównych przeglądarek.

W międzyczasie można próbować naśladować to zachowanie za pomocą technik takich jak (długoterminowe) sondowanie AJAX, rama na zawsze itd., Ale każda z nich ma swoje słabości.

+1

Jeśli jest to drugi synchroniczny aplikacja, która wykonuje dodawanie, można użyć kolejki komunikatów powiadomić o swojej aplikacji node.js. To wszystko byłoby po stronie serwera. – igorw

3

Chciałbym włączyć replikację w swoim mongodb. Istnieje replika? baza danych zawierająca listę zmian, podobnie jak w dzienniku replikacji mysql. Możesz to monitorować.

-Daniel

0

collection.insert ({ "klucz1": val1 "klucz2": "wart2"}, function (err, info) {
if (err) {// uchwyt to } else { if (info) {

można nazwać fireandforgetfunction (info). tutaj że można napisać do dzienników lub wysłać do SQS czy jakieś inne ikry dziecięcą lub w rzeczy proces ten mógłby być nawet zwrotna ale myślę, że w większości przypadków może dojść do pożaru i zapomnienia. Mówię ogień i zapominam, bo ja pr esume nie musisz posiadać odpowiedzi, aby móc zwrócić klientowi wszystko, czego potrzebujesz. A w niepełnym wymiarze odpowiedzi na inne pytanie można powrócić JSON jak ten

  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(); 
     } 
    }