Frage

Ich möchte unsere Webanwendung von der herkömmlichen PHP/MySQL auf eine effizientere Technologie optimieren/aktualisieren. Ich habe nach Node.js, Socket.io und Couchdb untersucht, die vielversprechend aussehen, aber nach Empfehlungen und einige Hilfe bei der Auswahl der besten Technologien für das, was wir wollen.

Also, um das derzeit getan zu werden ...

Wir haben Geräte, die Daten erfassen und an einen FTP -Server (über .txt -Datei) senden. Ein PHP -Skript wird alle 5 Minuten ausgeführt und das FTP für .txt -Dateien gescannt, die die Geräte senden. Der Inhalt der Dateien wird in eine MySQL -Datenbank eingefügt und die .txt -Datei gelöscht. Ein weiteres PHP -Skript, das alle 15 Minuten ausgeführt wird, werden Daten aus der Datenbank (z. B. Summenwerte für die letzte Stunde) gesammelt und ein XML -Dokument erstellt, das von Flash -Zifferblättern gelesen wird.

Offensichtlich gibt es hier viele Probleme, und es ist weit entfernt von einer Echtzeitlösung, wonach wir uns anstreben. Die Lösung, die wir möchten, ist, dass sie irgendwie erkennen kann, wann die TXT -Datei in die FTP hochgeladen wird, und die Daten dann nur verarbeiten (anstatt ein festgelegtes Intervall zu haben). Die Daten müssten noch zur Datenbank hinzugefügt und vom Front-End gelesen werden, sobald sie der Datenbank hinzugefügt werden. Flash würde vollständig entfernt, da es ein bisschen ... ick ...

Ich bin sicher, wir könnten diesen Prozess sehr verbessern! Ich bin mir bewusst, dass Ajax in der Lage ist, so etwas zu tun, aber zu hören, dass es im Vergleich zu Web -Sockets eher hohe Gemeinkosten hat. Ich bin auch ein wenig dunstig darüber, wie eine Datenbank mit node.js funktionieren würde, ganz zu schweigen von der besten Option für das, was wir saften ...

Vielen Dank!

War es hilfreich?

Lösung

Knoten funktioniert gut mit NoSQL (insbesondere JSON -basierten NoSQL), aber da es sich um Module handelt, um die meisten Datenbanken im Knoten zu behandeln, die asynchron sind, und JavaScript -Objekte zurückgeben, würde ich nicht mit MySQL entlassen, wenn Sie sich genauer verwenden.

Hier ist eine Agnostische Datenbank.

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top