Ich arbeite an einer Content-Management-Anwendung, in der die Daten, die in der Datenbank gespeichert werden, extrem generisch sind. In diesem speziellen Fall verfügt ein Container über viele Ressourcen, und diese Ressourcen werden einer Art von digitalem Asset zugeordnet, egal ob es sich dabei um ein Bild, einen Film, eine hochgeladene Datei oder sogar reinen Text handelt.diene mein Text aus dem Dateisystem anstelle einer Datenbank?
Ich habe seit einer Woche mit einem Kollegen streiten, weil zusätzlich zum Speichern der Bilder, etc - sie die Text-Assets auf dem Dateisystem speichern möchten und die Anwendung den Speicherort (aus der Datenbank) nachschlagen) und lesen Sie die Textdatei (aus dem Dateisystem) vor dem Servieren an die Client-Anwendung.
Der gesunde Menschenverstand schien mich zu schreien, dass dies lächerlich war und wenn wir uns Mühe geben, etwas aus der Datenbank nachzuschlagen, könnten wir den Text genauso gut in einer Datenbankspalte speichern und zusammen mit der Zeilensuche bereitstellen. Database Lookup + File IO schien unkontrollierbar langsamer als nur Database Lookup. Nachdem ich einige Zeit hin und her gegangen bin, habe ich beschlossen, einige Benchmarks zu fahren und die Ergebnisse ein wenig überraschend zu finden. Die Benchmark-Zeiten scheinen sehr wenig konsistent zu sein. Der einzige eindeutige Gewinner in den Benchmarks war das Ziehen eines großen Datensatzes aus der Datenbank und das Iterieren der Ergebnisse, um das Text-Asset anzuzeigen. Das Ziehen von Objekten nacheinander aus der Datenbank und das Anzeigen ihres Textinhalts scheint jedoch Kopf an Kopf zu liegen.
Jetzt kenne ich die Grenzen der Benchmarks laufen, und ich bin mir nicht sicher, ob ich sogar die richtige Idee von "Tests" (zum Beispiel, Dateisystem-Schreiben sind lächerlich schneller als Datenbank schreibt, wusste das nicht!) . Ich denke, meine Frage dient zur Bestätigung. Ist Datei-E/A vergleichbar mit dem Speichern/Suchen von Datenbank-Text? Fehle mir hier ein Teil des Arguments? Vielen Dank im Voraus für Ihre Meinung!
Eine schnelle Arbeit über das, was ich benutze: Dies ist eine Ruby on Rails-Anwendung, Rubin 1.8.6 und Sqlite3 verwenden. Ich plane beim Verschieben der gleichen Codebasis zu MySQL morgen und sehen, ob die Benchmarks gleich sind.
I haven Ich habe solche Tests nicht selbst gemacht, aber ich frage mich, wie das Dateisystem mit vielen vorhandenen Dateien abschneidet. Letztendlich ist das Dateisystem auch nur eine Art Datenbank. Was ich an "echten" Datenbanken mag, ist die Transaktionsverarbeitung/atomare Inserts. Irgendwie bin ich mit dem Dateisystem paranoid und befürchte, dass Schreibvorgänge mitten in einer Operation abstürzen und die gesamte Datei in einem fehlerhaften Zustand belassen. sagte, dass ich denke, große „dumme“ Dateien setzen (wie Bilder) auf dem Dateisystem und speichert nur die Dateinamen in der db ist ein gemeinsamer Ansatz. Versuchen Sie jedoch, den Webserver direkt zu bedienen. –