File-cache vs DB-cache

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

Moin.

wenn man teile von html seiten speichern möchte, ist es besser diese in ne DB zu schreiben oder in ein file ? mit "besser" meine ich, was schneller ist:

db abfrage mit suche nach der ID und ausgabe des inhalts

ODER

suche nach file mit ID als name und ausgabe des inhalts.
BlackJack

Kommt drauf an. Herrliche Antwort, nicht wahr!? ;-)

Es gibt Dateisysteme wo bei vielen Dateien in einem Verzeichnis die Suche nach einem Dateinamen langsam ist, und solche wo sie schnell ist.
debian75
User
Beiträge: 90
Registriert: Dienstag 27. November 2007, 01:05

ja, herrlich :)

das heisst ich muss es ausprobieren ? system wird nen: debian etch, intel celeron, 5400rpm HD.

wieviele dateien das werden kann ich noch nicht sagen...vielleicht so ca. 1000
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

debian75 hat geschrieben:wieviele dateien das werden kann ich noch nicht sagen...vielleicht so ca. 1000
Hallo debian75!

Bei bis zu 1000 Dateien ein einem Ordner würde ich mir noch keine Sorgen machen. Wenn du vorsorgen möchtest, dann kannst du die Dateien auf mehrere Ordner verteilen. Wenn du nur anhand des Dateinamen entscheiden kannst, welche Datei zu öffnen ist, dann ist eine Textdatei in einem Dateisystem so ziemlich das Schnellste was es gibt. Warum? Weil du die Datei direkt einlesen kannst. Auch wenn du viele Dateien in einem Ordner hast und dadurch ein Dateisystem langsamer werden kann, wird das **schnelle** Einlesen der Datei das wieder ausgleichen.

Anders würde die Sache aussehen, wenn du viele kleine Informationen speichern müsstest. Aber du schreibst ja, dass es sich um XML handelt. Wenn du erst anhand des Inhalts entscheiden kannst, ob die Datei die richtige für dich ist, dann bist du mit einer Datenbank oder einer geteilten Lösung besser beraten.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Das Dateisystem ist die Frage. `fat32` ist ungeeignet, bei `ext2` und `ext3` weiss ich grad' nicht aus dem Kopf wie Verzeichnisse organisiert werden und `ReiserFS` wäre geeignet. Da werden Verzeichnisse als Suchbaum mit Hashwerten der Dateinamen als Schlüssel organisiert.

Am besten schreibst Du die Schnittstelle zum Holen eines HTML-Fragments über eine ID so, dass man sich aussuchen kann ob die Speicherung im Dateisystem oder in einer Datenbank geschieht. Dann verwendest Du als Datenbanken SQLite und `shelve` und misst die Laufzeiten von allen drei Varianten. :-)
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

gerold hat geschrieben:Wenn du nur anhand des Dateinamen entscheiden kannst, welche Datei zu öffnen ist, dann ist eine Textdatei in einem Dateisystem so ziemlich das Schnellste was es gibt. Warum? Weil du die Datei direkt einlesen kannst. Auch wenn du viele Dateien in einem Ordner hast und dadurch ein Dateisystem langsamer werden kann, wird das **schnelle** Einlesen der Datei das wieder ausgleichen.
Das stimmt so nicht. Daten am Dateisystem erzeugen viel IO. Eine Datenbank kann selbsttätig optimieren und häufig gebrauchte Dinge im Speicher lassen.
TUFKAB – the user formerly known as blackbird
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:bei `ext2` und `ext3` weiss ich grad' nicht aus dem Kopf wie Verzeichnisse organisiert werden
ext2 scheint eine normale Tabelle zu nutzen, was wohl eher wenig geeignet ist, ext3 mit der Option dir_index unterstützt H-Bäume. Soll wesentlich schneller sein.

Jetzt frage ich mich grad, was mein ext3 eingestellt hat :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
tux21b
User
Beiträge: 18
Registriert: Mittwoch 15. Februar 2006, 23:20
Wohnort: Linz.at
Kontaktdaten:

Die DB optimiert und behält häufig genutzte Tabellen im Hauptspeicher. Die HDD hat hingegen nur einen Cache, der aber vom restlichen System gebraucht wird. Dafür hat jeder Rechner eine HDD, aber es gibt meist nur einen zentralen DB-Server, daher kann es bei der DB öfters zu Performance Probleme kommen...

Alternativ kannst du dir auch noch "memcached" anschauen. Der cached zwar nur im RAM, kennt aber sehr ausgereifte Algorithmen zur bestimmung was eingelagert wird und wann was wieder hinausgeworfen wird. Optimiert daher noch besser als eine DB und ist wesentlich schneller, ist aber natürlich von der Speichergröße beschränkt.
[url]http://www.ubuntuusers.de[/url]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo!

Lasst euch das bitte noch einmal durch den Kopf gehen.

Der OP spricht von 1000 Texten im HTML-Format. Text der nicht durchsucht, sondern nur gespeichert werden soll. Anhand eines Schlüssels soll so ein Text wieder aufgerufen werden können.

Was soll hier eine Datenbank groß optimieren können. Während mir eine Datenbank einen Text zurück liefert, kann ich wahrscheinlich drei einfache Textdateien öffnen und auslesen.

Die einfache Lösung (mit Textdateien) ist wahrscheinlich auch die schnellere Lösung. Und wenn man die Textdateien zum schnelleren Auffinden auch noch auf mehrere Ordner verteilt, dann sehe ich erst recht nichts was für eine Datenbank sprechen soll.

Als wahrscheinliche Dateisysteme kommen sowiso nur ReiserFS und Ext3 in Frage. Und für beide Dateisysteme sind 1000 Dateien in einem Ordner keine Herausforderung. Zumindest nichts was sich spürbar hervortun könnte.

Scheiß Tag! Ich glaube, ich schalte den Computer lieber aus.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Bei 1000 HTML-Dateien könnte man sich, einen ständig laufenden Prozess vorausgesetzt, sogar überlegen, die einmal am Anfang einfach alle zu laden.
lunar

mitsuhiko hat geschrieben:Das stimmt so nicht. Daten am Dateisystem erzeugen viel IO. Eine Datenbank kann selbsttätig optimieren und häufig gebrauchte Dinge im Speicher lassen.
Weißt du, der Kernel allokiert den Disk-Buffer nicht nur mal so zum Spaß ;)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

In django gibt es auch einen Disk-Cache. Dabei werden allerdings Unterverzeichnisse angelegt, ich glaube in zwei Ebenen.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Auch wenn der Thread schon was älter ist... Ich darf mal zitieren:
Für die Anwender eher unsichtbar hat sich an der Technik, die hinter dem Wiki steht einiges getan. Die von MoinMoin bekannte Speicherung von Artikeln im Dateisystem wich einer Datenbank. Dies soll insbesondere in Zeiten mit vielen Anfragen die Performance verbessern, indem die vielen Zugriffe auf das Dateisystem entfallen, die in der Vergangenheit insbesondere nach neuen Ubuntu-Veröffentlichungen für überlastete Server, genervte Anwender und jammernde Administratoren sorgten.
von: http://ikhaya.ubuntuusers.de/2008/07/22 ... n-Kulissen

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Dort wird auch nach dem Inhalt gesucht, nicht nur nach einem(!) Schlüssel.
Antworten