2010-06-21 11 views
27

Estoy usando Node.js para algún trabajo de proyecto y me gustaría monitorear mi base de datos de Mongo (recopilación) para cambios, básicamente desencadenar un evento si algo se agrega.Monitoreando Mongo para cambios con Node.js

¿Alguien sabe si esto es posible? Estoy usando los controladores node-mongodb-native.

Si no es así, también me gustaría tener cualquier puntero disponible para enviar datos desde el servidor (ejecutar con node) al navegador del cliente.

Respuesta

3

La pregunta es si todos los datos se agregan a su base de datos a través de su aplicación node.js. De ser así, puede usar la clase EventEmitter de node.js para activar un evento (http://nodejs.org/api.html#eventemitter-14).

Si la base de datos está poblada por alguna otra aplicación, las cosas se ponen difíciles. En este caso, necesitaría algo como un disparador de base de datos, que todavía no está disponible en MongoDB.

Se podrán realizar eventos al Cliente (también conocido como Comet) una vez que la API de websockets de HTML 5 llegue a los principales navegadores.

Mientras tanto, solo puede tratar de emular este comportamiento utilizando técnicas como (a largo plazo) sondeos AJAX, marcos para siempre, etc., pero cada uno de ellos tiene sus debilidades.

+1

Si se trata de una otra aplicación sincrónica que hace la adición, se puede utilizar una cola de mensajes para notificar a su aplicación node.js Todo esto estaría en el lado del servidor. – igorw

3

Me gustaría activar la replicación en su mongodb. Hay una replica? base de datos que contiene una lista de cambios, similar al registro de replicación de mysql. Puedes monitorear eso.

-Daniel

0

collection.insert ({ "key1": val1, "clave2": "val2"}, la función (err, info) {
si (err) {// manejar esta } else { si (info) {

que llamar a un fireandforgetfunction (info.), aquí que se pueden escribir en los registros o enviar a SQS o hacer algún otro engendro niño o en cosa proceso Esto podría incluso ser una devolución de llamada pero creo que un incendio y olvido pueden hacer en la mayoría de las circunstancias. Yo digo fuego y olvido porque yo pr no es necesario que mantenga activada la respuesta para que pueda devolver lo que necesite al cliente. Y, en parte, respuestas a su otra pregunta que pueda volver JSON como esto

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