Pregunta

Estoy buscando optimizar/actualizar nuestra aplicación web del PHP/MySQL tradicional, a una tecnología más eficiente. He estado investigando Node.js, Socket.io y CouchDB, que parecen prometedoras, pero estoy buscando recomendaciones y algo de ayuda para elegir las mejores tecnologías para lo que queremos.

Entonces, para describir lo que se hace actualmente ...

Tenemos dispositivos que capturan datos y los envían a un servidor FTP (a través del archivo .txt). Un script PHP se ejecuta cada 5 minutos, escaneando el FTP para archivos .txt que envían los dispositivos. El contenido de los archivos se insertan en una base de datos MySQL, y el archivo .txt se elimina. Otro script PHP que se ejecuta cada 15 minutos recopilará datos de la base de datos (por ejemplo, valores de suma para la última hora) y producirá un documento XML, que se lee mediante diales flash.

Obviamente, hay muchos problemas aquí, y está lejos de ser una solución en tiempo real, que es lo que apuntamos. La solución que nos gustaría es que de alguna manera podría detectar cuándo se carga el archivo TXT al FTP, y solo procesa los datos (en lugar de tener un intervalo establecido que se ejecuta). Los datos aún deberían agregarse a la base de datos y ser leído por el front-end tan pronto como se agregue a la base de datos. Flash se eliminaría por completo, ya que es un poco ... ick ...

Con nuevas tecnologías emocionantes como Node.js y Sockets web (Socket.io), ¡estoy seguro de que podríamos mejorar enormemente este proceso! Soy consciente de que Ajax puede hacer algo como esto, pero escucharlo tiene gastos generales bastante altos en comparación con los enchufes web. También soy un poco confuso con cómo funcionaría una base de datos con Node.js, sin mencionar la mejor opción para lo que buscamos ...

¡Gracias!

¿Fue útil?

Solución

El nodo funciona bien con NoSQL (especialmente nosql basado en JSON) pero dado que son módulos para manejar la mayoría de las bases de datos en el nodo que son async y devuelven objetos JavaScript que no descartaría usando MySQL si se siente más cómodo usándolo.

Aquí hay un esquema agnóstico de la base de datos.

var fs = require('fs');  //to watch the FTP
var db = require('db');  //your choice of db
var express = require('express'); //http server
var io = require('socket.io'); //for realtime data push
var app = express.createServer(); //create http server
/*...usual express implementation...*/
app.listen(80);
var socket = io.listen(app); 
db.connect( ..., start );
function checkForFiles () {
  fs.readdir( FTPpath, sendFilesToDB );
};
function sendFilesToDB ( err, files ) {
  if( files.length === 0 ) {
    return checkForFiles();
  }
  db.insert( fileToQuery( files.pop() ), function () {
    sendFilesToDB( err, files );
  });
}
function fileToQuery ( file ) {
  ...
  return query;
}
function start () {
  checkForFiles();
  setTimeout( checkData, 1000 );
}
function checkData () {
  db.query( '....', function ( err, data ) {
    socket.broadcast( processData( data ) );
    setTimeout( checkData, 1000 );
  }
}
function processData (data) {
  ...
  return data;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top