Frage

Ich habe eine Idee für eine einfache Anwendung, die eine Gruppe von Ordnern überwacht und alle gefundenen Dateien indiziert.Eine GUI ermöglicht es mir, neue Dateien schnell mit Tags zu versehen und sie zur Speicherung in eine einzige Datenbank zu verschieben. Außerdem bietet sie einen einfachen Mechanismus zum Abfragen der Datenbank nach Tag, Name, Dateityp und Datum.Im Moment habe ich über 100 GB Dateien auf ein paar Wechselfestplatten, die Datenbank wird mindestens so groß sein.Wenn möglich, würde ich gerne die Volltextsuche der eingebetteten Binär- und Textdokumente unterstützen.Dies wird eine Einzelbenutzeranwendung sein.

Ich versuche nicht, einen DB-Krieg zu beginnen, aber welche Open-Source-DB wird für mich am besten funktionieren?Ich bin mir ziemlich sicher, dass SQLLite vom Tisch ist, aber ich könnte mich irren.

War es hilfreich?

Lösung

Ich erforsche diese Option immer noch für eines meiner eigenen Projekte, aber CouchDB ist vielleicht einen Blick wert.

Andere Tipps

Warum die Dateien überhaupt in der Datenbank speichern?Hinterlegen Sie einfach Ihre Metadaten und einen Dateinamen.Wenn Sie sie aus irgendeinem Grund an einen neuen Speicherort kopieren müssen, tun Sie dies einfach als Dateisystemkopie.

Sobald Sie den Dateiinhalt entfernen, kann jede kompetente Datenbank die Metadaten für einige hunderttausend Dateien verarbeiten.

Ich würde es vorziehen, das Dokument mit den Metadaten zu speichern.Ein Grund ist die relationale Integrität.Sie können die Dateien nicht einfach verschieben oder ändern, ohne dass die Aktion von der Datenbank vermittelt wird.Ich bin sicher, dass ich mit diesen Problemen umgehen kann, aber es ist nicht so sauber, wie ich es gerne hätte, und ich habe die Erfahrung gemacht, dass die meisten Anbieter heutzutage große Mengen an Binärdaten in der Datenbank verarbeiten können.Ich habe mich wohl gefragt, ob PostgreSQL oder MySQL in diesen Bereichen offensichtliche Vorteile haben. Ich kenne mich hauptsächlich mit Oracle aus.Wie auch immer, vielen Dank für die Antwort. Wenn die Datenbank weiß, wo sich die externe Datei befindet, kann ich die Datei bei Bedarf auch zu einem späteren Zeitpunkt problemlos importieren.Ein weiterer Aspekt der Frage war, ob es einfacher ist, mit einer der beiden Datenbanken zu arbeiten, wenn Python verwendet wird.Ich gehe davon aus, dass es sich um eine Wäsche handelt.

Ich hasse es immer, mit „Nein“ zu antworten, aber Sie sollten besser mit etwas wie Lucene indexieren (PyLucene).Das und das Speichern der Pfade in der Datenbank anstelle der Dateiinhalte wird fast immer empfohlen.

Hinzu kommt, dass keine dieser Datenbank-Engines LOBs in einem separaten Datenraum speichert (sie werden in den Datenraum der Tabelle eingebettet), sodass alle dieser Engines nahezu die gleiche Leistung erbringen sollten (außer SQLlite).Sie müssen zu Informix, DB2, SQLServer oder anderen wechseln, um diese Art der Handhabung binärer Objekte zu erhalten.

So gut wie jede davon würde funktionieren (obwohl SQLLite nicht für die gleichzeitige Verwendung in einer Mehrbenutzerumgebung gedacht war, was ein Problem darstellen könnte ...), da Sie den tatsächlichen Inhalt der Dateien nicht indizieren möchten.

Der einzige begrenzende Faktor ist die maximale „Paketgröße“ der angegebenen Datenbank (mit Paket beziehe ich mich auf eine Abfrage/Antwort).Normalerweise liegt diese Grenze bei etwa 2 MB, was bedeutet, dass Ihre Dateien kleiner als 2 MB sein müssen.Natürlich könnten Sie dieses Limit erhöhen, aber der gesamte Prozess ist ziemlich ineffizient, da Sie zum Beispiel zum Einfügen einer Datei Folgendes tun müssten:

  • Lesen Sie die gesamte Datei in den Speicher ein
  • Transformieren Sie die Datei in einer Abfrage (was normalerweise bedeutet, dass sie hexadezimal kodiert wird – und so die Größe von Anfang an verdoppelt).
  • Ausführen der generierten Abfrage (was wiederum für die Datenbank bedeutet, dass sie diese analysieren muss)

Ich würde eine einfache Datenbank verwenden und die zugehörigen Dateien nach einer Namenskonvention speichern, die das Auffinden erleichtert (z. B. basierend auf dem Primärschlüssel).Natürlich ist dieses Design nicht „rein“, aber es bietet eine viel bessere Leistung und ist auch einfacher zu verwenden.

Warum verschwenden Sie Zeit damit, etwas zu emulieren, mit dem das Dateisystem umgehen können sollte?mehr Speicherplatz + grep ist Ihre Antwort.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top