Hallo zusammen,
versuch grad heraus zu finden, was in meinem folgenden Szenario DB lastiger ist um die DB nicht unnötig zu belasten.
Ich habe eine List mit 5000 Datensätzen aus einer Text-Datei, diese 5000 Objekte sind bereits in der Datenbank und müssen updated werden.
Sagen wir es sind 5000 Autos, jeweils muss der Preis updated werden (um es einfach zu halten, es werden noch wesentlich mehr Merkmale updated) und es muss ein Flag gesetzt werden, ob der Wagen noch in der Datei ist.
Nun die Frage, was ist "teurer" Jedes Auto einzeln erst mit Select holen, dann prüfen ob der Preis, Lagermenge, Lagerort etc geändert hat, wenn ja > updaten oder ist es schlauer direkt den Update Query absetzen und dabei auch gleich isavailable = true setzen?
Ich vermute, dass es die DB doppelt belastet wenn das Objekt erst geholt wird und dann nochmal updated wird oder?
Ich versuch es hier nochmal mit Dummycode darzustellen:
Plan A: Jedes Auto per select erstmal anfragen und während dessen als "Auto ist noch in der Textdatei" markieren.
Plan B:
Auto einfach auf gut Glück updaten:
versuch grad heraus zu finden, was in meinem folgenden Szenario DB lastiger ist um die DB nicht unnötig zu belasten.
Ich habe eine List mit 5000 Datensätzen aus einer Text-Datei, diese 5000 Objekte sind bereits in der Datenbank und müssen updated werden.
Sagen wir es sind 5000 Autos, jeweils muss der Preis updated werden (um es einfach zu halten, es werden noch wesentlich mehr Merkmale updated) und es muss ein Flag gesetzt werden, ob der Wagen noch in der Datei ist.
Nun die Frage, was ist "teurer" Jedes Auto einzeln erst mit Select holen, dann prüfen ob der Preis, Lagermenge, Lagerort etc geändert hat, wenn ja > updaten oder ist es schlauer direkt den Update Query absetzen und dabei auch gleich isavailable = true setzen?
Ich vermute, dass es die DB doppelt belastet wenn das Objekt erst geholt wird und dann nochmal updated wird oder?
Ich versuch es hier nochmal mit Dummycode darzustellen:
Plan A: Jedes Auto per select erstmal anfragen und während dessen als "Auto ist noch in der Textdatei" markieren.
Code:
void arbeiteTextDateiab() {
updateAvailable();
List<Auto> autos = leseDatei();
for (Auto autoAusDatei : autos) {
Auto existingAuto = getExistingAutoAusDb(autoAusDatei.id);
if (existingAuto != null) {
if (existingAuto.gerPreis() != autoAusDatei.getPreis()) {
updatePrice();
}
}
//else {
//nichts machen, weil keine Änderung
// }
}
updateAvailable(){
Update auto set isavailable = false; //Alle Autos erstmal als nicht verfügbar markieren, wird dann auf true gesetzt, wenn es abgefragt wird. Alle die nach dem durchlauf immer noch false sind, sind werden deaktiviert, da sie nicht mehr in der Datei waren.
}
getExistingAutoAusDb(int id) {
Select * from auto where id = id;
Update auto set isavailable = true where id = id;
}
lesedatei() {
//Lese Datei
return List < Auto >;
}
Plan B:
Auto einfach auf gut Glück updaten:
Code:
List<Auto> autos = leseDatei();
for(Auto autoAusDatei :autos){
updatePrice(autoAusDatei);
}
updatePrice(Auto autoAusDatei){
Update auto set price = autoAusDatei.getPreis(), SET isavailable=true WHERE id= autoAusDatei.getId();
}
lesedatei() {
//Lese Datei
return List < Auto >;
}
updateAvailable() {
Update auto set isavailable = false; //Alle Autos erstmal als nicht verfügbar markieren, wird dann auf true gesetzt, wenn es abgefragt wird. Alle die nach dem durchlauf immer noch false sind, sind werden deaktiviert, da sie nicht mehr in der Datei waren.
}