2 Stimmen

JAVA: Datei existiert vs. Suche in großer XML-Datenbank

Ich bin ziemlich neu in der Java-Programmierung und schreibe meine erste Desktop-Anwendung, diese Anwendung nimmt eine eindeutige ISBN und prüft zunächst, ob sie bereits in der lokalen Datenbank vorhanden ist. Falls dies der Fall ist, wird sie einfach aus der lokalen Datenbank gelesen, falls nicht, werden die Daten von isbndb.com angefordert und in die Datenbank eingegeben. Die lokale Datenbank ist im XML-Format. Jetzt frage ich mich, welche der folgenden beiden Methoden den geringsten Overhead verursachen würde, um zu überprüfen, ob der Eintrag bereits vorhanden ist.

Methode 1.) Datei vorhanden.

Beim Erstellen des DB-Eintrags würde die Anwendung für jede ISBN-Nummer eine separate Datei mit dem Namen ISBN-Nummer.xml (z. B. 3846504937540.xml) erstellen und beim Überprüfen die Methode "Datei vorhanden" verwenden, um zu überprüfen, ob ein Eintrag bereits existiert, indem die vom Benutzer bereitgestellte ISBN verwendet wird.

Methode 2.) SAX XML-Parser.

Alle Einträge würden in eine einzige große XML-Datei eingetragen und beim Überprüfen auf vorhandene Einträge würde der SAX XML-Parser verwendet, um die Datei zu analysieren, und dann würde die vom Benutzer bereitgestellte ISBN auf Übereinstimmungen mit denen in der XML-Datenbank überprüft.

Anmerkung: Die resultierenden Einträge könnten im Laufe der Zeit Tausende erreichen.

Alle Informationen würden sehr geschätzt werden.

1voto

Ted Hopp Punkte 227177

Ich denke, dass keiner der beiden Methoden besonders toll ist. Ich empfehle dringend, ein DBMS zu verwenden, um die Daten zu speichern. Wenn Sie kein DBMS auf dem System haben oder wenn Sie eine App möchten, die auf Systemen ohne installiertes DBMS ausgeführt werden kann, sehen Sie sich die Verwendung von SQLite an. Sie können es von Java aus mit SQLiteJDBC by David Crawshaw verwenden.

Was Ihre beiden Methoden betrifft, wird die erste eine enorme Menge an Dateienchaos erzeugen, ganz zu schweigen von Wartungs- und Konsistenzproblemen. Die zweite Methode wird langsam, sobald Sie eine beträchtliche Anzahl von Einträgen haben, da Sie im Durchschnitt die Hälfte der Datenbank für jede Abfrage lesen müssen. Mit einem DBMS können Sie dies vermeiden, indem Sie Indizes für die Informationen definieren, die Sie schnell nachschlagen müssen. Das DBMS wird die Indizes automatisch pflegen.

0voto

Savino Sguera Punkte 3432

Ich mag die Idee nicht so sehr, sich auf das Dateisystem für diese Aufgabe zu verlassen: Ich weiß nicht, wie kritisch deine Anwendung ist, aber es können viele Dinge mit diesen XML-Dateien passieren :) außerdem, wenn der Ordner sehr sehr groß wird, müsstest du darüber nachdenken, diese Dateien in eine hierarchische Ordnerstruktur aufzuteilen, um eine anständige Leistung zu haben.

Andererseits verstehe ich nicht, warum man eine XML-Datei als Datenbank verwenden sollte, wenn man häufig aktualisieren muss.

Ich würde eine relationale Datenbank verwenden und für jeden Datensatz einen neuen Eintrag in einer Tabelle mit einem Index auf die ISBN-Nummern-Spalte hinzufügen.

Wenn du Tausende Einträge hast, könntest du sehr gut mit sqlite gehen und es bei Bedarf durch eine leistungsstärkere nicht eingebettete Datenbank ersetzen, ohne (oder mit wenig :) ) Code-Änderungen.

0voto

Farmor Punkte 8752

Erweitern Sie Ihre Datenbanktabelle, um nicht nur den XML-String, sondern auch die ISBN-Nummer einzuschließen.
Dann wählen Sie die XML-Spalte basierend auf der ISBN-Spalte aus.

Abfrage: Java escaped, "select XMLString from cacheTable where isbn='"+ isbn +"'"

Ein anderer Ansatz könnte sein, ein ORM wie Hibernate zu verwenden.
Im ORM verwenden Sie anstelle des Speicherns des gesamten XML-Dokuments in einer Spalte verschiedene Spalten für jedes Element und Attribut, und Sie könnten sogar Ihr Dokument über mehrere Tabellen aufteilen für ein einfacheres langfristiges Design.

0voto

Ali Hashemi Punkte 2815

Ich denke, du solltest lieber ein DBMS anstelle deiner 2 Methoden verwenden.

0voto

Alvin Punkte 9948

Wenn Sie nur geringen Overhead für die Überprüfung des Vorhandenseins möchten, ist wahrscheinlich Option 1 das, was Sie möchten, da es sich um einen direkten Lookup handelt. Das Parsen von XML jedes Mal zur Überprüfung erfordert, dass Sie im schlimmsten Fall die gesamte XML-Datei durchlaufen. Obwohl Sie mit Option 2 Caching betreiben können, ist das komplizierter als Option 1.

Bei Option 1 müssen Sie jedoch beachten, dass es eine Obergrenze dafür gibt, wie viele Dateien Sie unter einem Verzeichnis speichern können. Sie müssen wahrscheinlich die XML-Dateien in mehreren Ebenen speichern (zum Beispiel /xmldb/38/46/3846504937540.xml).

Das gesagt, keines Ihrer Optionen ist ein guter Weg, um Daten langfristig zu speichern, Sie werden feststellen, dass sie ziemlich restriktiv werden und schwer zu verwalten sind, wenn die Daten wachsen.

Viele Leute haben bereits empfohlen, ein DBMS zu verwenden und ich bin einverstanden. Darüber hinaus würde ich Ihnen empfehlen, sich eine dokumentenbasierte Datenbank wie MongoDB als Ihre Datenbank anzusehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X