Hallo Zusammen,
ich habe das Problem , dass Datenbankabfragen nicht konsequent der Reihe nach abgearbeitet werden und sich somit überlappen.
Über einen Kanal bekomme ich Daten geschickt, welche innerhalb einer Funktion weiterverarbeitet werden. Aus dieser Funktion heraus werden die Daten in eine DB übertragen. Wenn noch nicht vorhanden, werden die Daten in die DB geschrieben, sollten diese dort vorhanden sein, aktualisiert.
In meinem konkreten Fall, habe ich in einer Spalte JSON files liegen, welche ich auslese, aktualisiere und dann wieder in die DB transferiere. Kommen nun kurz hintereinander für das gleiche JSON mehrere Aktualisierungen, so zieht die zweite Aktualisierung das gleiche JSON aus der DB wie die Erste, da die erste Aktualisierung noch nicht in der DB gespeichert wurde. Es entsteht dadurch das Problem, dass die zweite Aktualisierung mit dem gleichen JSON-Stand wie die Erste arbeitet und somit Daten der ersten Aktualisierung verloren gehen. Das zieht sich natürlich immer weiter durch...
Ich habe mit Datenbankabfragen keine Erfahrung und suche eine Möglichkeit, das alle Daten der Reihe nach abgearbeitet werden. Ich möchte keinen Time-Loop verwenden.
Über einen Denkanstoß oder noch besser, über eine Lösung wäre ich sehr dankbar! Die Funktion VerarbeitungDaten dürfte erst aufgerufen werden, wenn der "vorherige" Durchlauf beendet wurde oder einfach nicht parallel laufen. Eine Art Liste zum Abarbeiten der eingehenden Daten? Wenn ja, wie stelle ich das am einfachsten dar?
ich habe das Problem , dass Datenbankabfragen nicht konsequent der Reihe nach abgearbeitet werden und sich somit überlappen.
Über einen Kanal bekomme ich Daten geschickt, welche innerhalb einer Funktion weiterverarbeitet werden. Aus dieser Funktion heraus werden die Daten in eine DB übertragen. Wenn noch nicht vorhanden, werden die Daten in die DB geschrieben, sollten diese dort vorhanden sein, aktualisiert.
In meinem konkreten Fall, habe ich in einer Spalte JSON files liegen, welche ich auslese, aktualisiere und dann wieder in die DB transferiere. Kommen nun kurz hintereinander für das gleiche JSON mehrere Aktualisierungen, so zieht die zweite Aktualisierung das gleiche JSON aus der DB wie die Erste, da die erste Aktualisierung noch nicht in der DB gespeichert wurde. Es entsteht dadurch das Problem, dass die zweite Aktualisierung mit dem gleichen JSON-Stand wie die Erste arbeitet und somit Daten der ersten Aktualisierung verloren gehen. Das zieht sich natürlich immer weiter durch...
Ich habe mit Datenbankabfragen keine Erfahrung und suche eine Möglichkeit, das alle Daten der Reihe nach abgearbeitet werden. Ich möchte keinen Time-Loop verwenden.
Über einen Denkanstoß oder noch besser, über eine Lösung wäre ich sehr dankbar! Die Funktion VerarbeitungDaten dürfte erst aufgerufen werden, wenn der "vorherige" Durchlauf beendet wurde oder einfach nicht parallel laufen. Eine Art Liste zum Abarbeiten der eingehenden Daten? Wenn ja, wie stelle ich das am einfachsten dar?
Javascript:
function AnkommendeDaten(id, data){
VerarbeitungDaten(id, data);
}
function VerarbeitungDaten(id, data){
// Abfrage Datenreihe vorhanden durch count
connection.query("SELECT COUNT(id) AS count FROM test_data WHERE id = '" + id + "'", function (err, result, fields) {
if (result[0].count === 0) {
// Neue Datenreihe wird in DB geschrieben
// ...
}else{
// Bestehender Datensatz wird aus DB gelesen
connection.query("SELECT data FROM test_data WHERE id = '" + id + "'", function (err, result, fields) {
// data (json) wir aktualisiert oder erweitert
// ...
// data (json) wird in DB transferiert
connection.query("UPDATE test_data SET data = '" + jsonfile + "' WHERE id = '" + id + "'", function (err, result, fields) {
if (err)
throw err;
});
});
}
});
}
Zuletzt bearbeitet: