2009-08-26 6 views
0

Meine Webanwendung speichert Produktinformationen in XML-Dateien auf der Festplatte, auf dem Webserver. Das ist vollkommen in Ordnung, wenn es um ein paar Produkte geht, aber ich habe meine Sorge, dass große Mengen von Dateien Probleme verursachen können.Datenspeicheransatz auf Webservern

Also lassen Sie uns sagen, ich werde haben 20.000 Produkte, das würde bedeuten, in einem Verzeichnis mit 20.000 XML-Dateien mit. Ich bin nicht vertraut mit Webserver-Festplattenspeicher-Infrastruktur, würde so viele Dateien Probleme wie erhebliche Rückgang der Zugriffsgeschwindigkeit und/oder übermäßige Festplattenfragmentierung verursachen? Zerplatzen Storage-Server sogar, ist Fragmentierung ein Problem, um das ich mich auf Servern kümmern muss?

ich lieber meine XML-Dateien einzelne halten, weil ich sie direkt als statische Inhalte via http zugreifen kann mich viel schneller Zugriffsgeschwindigkeit und Cache geben. Die Alternative wäre, eine große binäre Datendatei zu erstellen und jedes Produktdaten-XML in dieser Datei im Binärmodus zu speichern, und dann ein serverseitiges Skript zu verwenden, um die xmls aus dieser großen Datendatei zu extrahieren. (Ja, ich weiß, ich kann sie einfach in einer Datenbank speichern, aber das ist nicht der Fall, dass ich interessiert bin.)

+0

Das Ausmaß, in dem Fragmentierung und Zugriffsgeschwindigkeit Probleme sind, hängt von dem Dateisystem ab, auf dem Sie dies speichern. Ist es Unix/Windows? Welche Art von Dateisystem verwenden Sie? –

+0

Nun, mein Hauptziel sind klassische Shared-Hosting-Konten, meine Anwendung ist PHP, so dass in den meisten Fällen die Maschine Unix wäre. Die Dateien sind klein, je 25-50KB, vielleicht größer, aber wahrscheinlich weniger als 100KB. Und in Bezug auf Auslastung/Nutzung, denke ich durchschnittliche Auslastung, oder Mid-Level, für High-Level Ich hätte wahrscheinlich keine andere Wahl und nur diese Dateien in einer Datenbanktabelle speichern. –

Antwort

-1

Welche Größe sind die Dateien? Wie viele Treffer/Sekunde? Was ist die relative Popularität jeder Datei? Wie viele Festplatten? Wie viel Arbeitsspeicher? Verwenden Sie RAID?

Grundsätzlich - es kommt darauf an.

+0

Dies ist nicht einmal ein Versuch einer Antwort, versuche Erklärungen für verschiedene Szenarien zu geben. –

+0

Mein Punkt ist, dass es _is_ keine Antwort gibt - das ist eine sehr subjektive Frage, abhängig von so vielen Faktoren, dass, ohne mit mehreren Ansätzen zu experimentieren, keine sinnvollen Ergebnisse erzielt werden können. – nfm

0

Werfen Sie einen Blick auf das Berkeley DB XML-Datenbanksystem. Sie können Ihren nativen XML-Code beibehalten und gleichzeitig alle ACID-Vorteile einer Datenbank nutzen.

Denken Sie daran, dass Disk IO zu den teuersten Operationen gehört.

-Link: http://www.oracle.com/database/berkeley-db/xml/index.html

+0

Danke für den Vorschlag. Das ist ziemlich genau das, worauf ich Bezug nahm, als ich sagte, die Dateien in einer großen Datei zu speichern. Die Oracle-Lösung ist für mich nicht wirklich nützlich, mein Code darf neben der Standard-PHP-Installation keine Server-Anforderungen haben. Ich wäre interessiert, wenn es eine reine PHP-Lösung gibt, die ähnliche Ziele erreichen kann wie die Oracle XML DB, falls vorhanden. Sonst werde ich meine eigene lahme Version schreiben müssen. –

0

Gute Idee, die Anzahl der Dateien oder Verzeichnisse in einem bestimmten Verzeichnis zu begrenzen.

Eine Strategie ist es, wenn Sie eindeutige Kennungen für jede XML-Datei haben, eine Ordnerstruktur, die diese Kennung verwendet.

z.B.

00Produkt wird in abgelegt:

Produkte \ 00 \ 01 \ 23 \ product.xml

und Produkt 019.384 gespeichert in:

Produkte \ 01 \ 93 \ 84 \ product. xml

das wird die Anzahl der Elemente in einem bestimmten Ordner auf 100 zu reduzieren, was ziemlich angemessen ist.

Hoffnung, das hilft.

0

, wenn Sie an einen Punkt gelangen, wo Sie haben, dass viele Produkte dann empfehle ich ein Datenbanksystem von einer Art verwendet wird. Wenn Ihr Hauptanliegen Caching ist, gibt es viele caching methods da draußen, die statisch-ähnliche Leistung für datenbankgestützte Systeme bieten. Plus, wenn Ihr Unternehmen ist an einem Punkt, wo es hat 20.000 Produkte zu verwalten, dann eine Datenbanktabelle Verwaltung ist die am wenigsten von ihren Sorgen;)

+0

Ich beginne zu sehen, dass die beste Lösung nur für die Verwendung einer Datenbank von Anfang an, da Caching nicht wirklich ein großes Problem ist. –

+0

Ja, das und Sie sollten es wahrscheinlich tun, während Sie eine ziemlich kleine Anzahl von Produkten haben. Auf diese Weise bleibt Ihr Importaufwand gering. –

0

Eine Datenbank ist der Weg zu gehen. Wenn Sie keine externen Abhängigkeiten wünschen, können Sie mit sqlite gehen. Es ist in PHP integriert und standardmäßig in den aktuellen PHP-Versionen aktiviert.

Der zugrunde liegende Datenspeicher besteht in der Regel aus einer einzigen Datei.

Verwandte Themen