Frage

Ich versuche, mit Textdateien zum Speichern von Daten auf einem Server zu starten, anstatt sie alle in einem großen MySQL-Datenbank zu speichern. Das Problem ist, dass ich wahrscheinlich Tausende von Ordnern und Hunderttausende von Dateien zu erzeugen würde (wenn ich jemals maßstabs haben). Was sind die Probleme mit diesem? Ist es langsam bekommen wirklich? Ist es etwa die gleiche Leistung wie eine Datenbank mit?

Was ich meine: Anstatt eine Datenbank, die einen Blog Tabelle speichert, hat dann eine Zeile, die „Autor“, „message“ und „Datum“ enthält würde ich stattdessen haben: Ein Ordner für den spezifischen Beitrag, dann * .txt-Dateien in diesem Ordner als hat „Autor“, „message“ und „Datum“ in ihnen gespeichert.

War es hilfreich?

Lösung

Dies wäre immens langsamer Lese als einer Datenbank (Datei schreibt alle in etwa die gleiche Geschwindigkeit passieren - Sie einen Schreib im Speicher nicht gespeichert werden können).

Datenbanken optimiert und soll auf eine solche große Mengen verarbeiten strukturiert Daten. Dateisysteme sind nicht. Es wäre ein Fehler, zu versuchen, eine Datenbank mit einem Dateisystem zu replizieren. Schließlich können Sie Ihre Datenbank Spalten-Index, aber es ist schwierig, das Dateisystem ohne ein weiteres Werkzeug zu indexieren.

Datenbanken sind für schnellen Datenzugriff und Wieder gebaut. Dateisysteme werden für die Datenspeicherung gebaut. Verwenden Sie das richtige Werkzeug für den Job. In diesem Fall ist es absolut eine Datenbank.

aber sagen, dass, wenn Sie HTML-Dateien für die Beiträge erstellen möchten, und speichern Sie dann diese Schauplätze in einem DB, so dass Sie leicht, um sie zu bekommen, dann ist das auf jeden Fall eine gute Lösung (a la Movable Type).

Aber wenn man diese Dinge in einem Dateisystem speichern, wie können Sie Ihren letzten Beitrag erfahren? Produktivste Autor? Umstrittenste Autor? All diese Dinge sind mit einer Datenbank trivial, und sehr hart mit einem Dateisystem. Stick mit der Datenbank, Sie werden froh, dass du getan hast.

Andere Tipps

Es ist wirklich abhängig:

  • Was ist Dateigröße
  • Welche Haltbarkeit Anforderungen haben Sie?
  • Wie viele Updates führen Sie durch?
  • Was ist Dateisystem?

Es ist nicht offensichtlich, dass MySQL schneller sein würde:

Ich habe einmal einen solchen Vergleich für kleine Objekt, um es als Sitzungen Speicher zu verwenden für CppCMS . Mit einem Index (Key Only) und zwei Indizes (Primärschlüssel und Sekundär Timeout).

File System:   XFS     ext3 
-----------------------------
Writes/s:      322     20,000

Data Base \  Indexes:    Key Only   Key+Timeout
-----------------------------------------------
Berkeley DB              34,400      1,450
Sqlite No Sync            4,600      3,400
Sqlite Delayed Commit    20,800     11,700

Wie Sie sehen können, mit einfachen Ext3-Dateisystem war schneller oder so schnell wie Sqlite3 für Speichern Daten, weil es nicht Sie geben (D) von ACID.

Auf der anderen Seite ... DB gibt Ihnen viele, viele wichtige Funktionen, die Sie wahrscheinlich benötigen, so Ich würde mit Dateien als Speicher nicht empfehlen, es sei denn, Sie es wirklich brauchen.

Denken Sie daran, DB ist nicht immer der Flaschenhals des Systems

Vergessen Sie langatmige Antworten, hier sind die einfachsten Gründe, warum die Speicherung von Daten im Nur-Text-Dateien sind eine schlechte Idee:

  1. Es ist nahezu unmöglich, abzufragen. Wie würden Sie sortieren Beiträge Datum Blog? Sie müssten alle Dateien lesen und ihr Datum vergleichen, oder Ihre eigene Indexdatei pflegen (im Grunde, eine eigene Datenbank-System schreiben.)

  2. Es ist ein Albtraum zu sichern. tar cjf wird es nicht schneiden, und wenn Sie versuchen, können Sie mit einem inkonsistenten Schnappschuss enden.

Es ist wahrscheinlich ein Dutzend andere gute Gründe, keine Dateien zu verwenden, ist es schwer, die Leistung zu überwachen, sehr schwer zu debuggen, in der Nähe unmöglich im Fehlerfall zu erholen, gibt es keine Werkzeuge, um sie zu handhaben, etc ...

Ich denke, hier ist der Schlüssel, dass es keine Indizierung Ihrer Daten sein. SO etwas zurückzuholen in etwa eine Suche rediculously langsam im Vergleich zu einer indizierten Datenbank wäre. Auch IO-Operationen teuer sind, könnte eine Datenbank (teilweise) in Erinnerung sein, die die Daten viel schneller verfügbar macht.

Sie sagen nicht wirklich, warum Sie nicht eine Datenbank selbst ... Aber in dem Szenario, das Sie beschreiben verwenden werde ich auf jeden Fall einen DB über Ordner jeden Tag, für ein paar Gründe verwenden würde. Zunächst einmal scheint das Blog Szenario sehr einfach, aber es ist sehr leicht, sich vorzustellen, dass Sie einen Tag, es mit mehr Funktionalität erweitern möchten wie Suche, mehr Post Details, Kategorien etc.

Ich denke, dass das Modell wachsenden wäre schwieriger in einer Ordnerstruktur zu tun, als in einem DB.

Auch sind Datenbanken in der Regel viel schneller, dass Dateizugriff durch Indizierung und Speicher-Caching.

IIRC FUDforum den Datei-Speicher aus Geschwindigkeitsgründen verwendet, kann es viel schneller sein, eine Datei zu packen, als einen DB-Index zu suchen, die Daten aus der DB abrufen und an die Benutzer zu senden. Sie traden den Dateisystem-Schnittstelle mit der DB und DB-Bibliothek Schnittstellen.

Doch das bedeutet nicht, es wird schneller sein oder langsamer. Ich glaube, Sie werden feststellen, schriftlich auf dem Dateisystem schneller ist, aber schneller auf der DB für allgemeine Fragen zu lesen. Wenn Sie wie FUDforum, Sie relativ unveränderlichen Daten, die Sie mehrere Beiträge in eine, dann eine Datei-basd Ansatz zeigen wollen viel schneller sein können: zB sie müssen nicht für jeden Zusammenhang mit Post suchen, sie halten alles in 1 Textdatei und es einmal angezeigt werden soll. Wenn Sie diese Art von Optimierung einsetzen können, dann Ihr dateibasierten Ansatz funktionieren wird.

Auch arbeitet Mail-Server in der Datei-basierten Ansatz auch die Maildir-Format speichert jede E-Mail-Nachricht als eine Datei in einem Verzeichnis, nicht in einer Datenbank.

eine Sache, die ich allerdings sagen würde, werden Sie besser zu speichern alles in 1 Datei, nicht 3. Das Dateisystem zu lesen ist besser (und Caching) eine einzelne Datei als mit mehreren Einsen ist. Also, wenn Sie jede Nachricht als 3 Teile speichern möchten, um sie alle in einer einzigen Datei speichern, lesen Sie es einem der Teile zu erhalten und nur die eine Anzeige Sie zeigen möchten.

... und dann wollen Sie alle Beiträge von einem Autor suchen und Sie erhalten eine Million Dateien anstelle einer einfachen SQL-Abfrage zu lesen ...

Datenbanken sind nicht schneller. Denken Sie daran: Am Ende sie als auch die Daten im Dateisystem speichern. So ist die Frage, ob eine Datenbank schneller ist, hängt stark von dem Zugriffspfad.

Wenn Sie nur einen Zugriffspfad, der das Dateisystem mit Dateistruktur korreliert sein könnte viel schneller dann einer Datenbank. So stellen Sie sicher einiges Caching für das Dateisystem zur Verfügung haben.

Natürlich können Sie tun lose all die schönen Dinge einer Datenbank: - Transaktionen - flexible Möglichkeiten, um Indexdaten und Zugriff auf Daten daher auf flexible Art und Weise schnell vernünftig. - flexibel (obwohl hässlich) Abfragesprache -. Hohe Verwertbarkeit

Die Skalierung hängt wirklich von dem Dateisystem verwendet. AFAIK die meist Dateisystem eine Art Obergrenze für die Anzahl von Dateien (ganz oder pro Verzeichnis), obwohl auf die neue dies oft sehr hoch ist. Für Struktur Hunderte und Tausende von Dateien mit einem Verzeichnis Verzeichnisse auf eine vernünftige Größe zu halten, soll es möglich sein, ein gut funktionierendes Dateisystem zu finden.

@ Eric Kommentar: Es hängt davon ab, was Sie brauchen. Wenn Sie nur den Inhalt genau auf Datei pro Abfrage benötigen, und Sie können den Speicherort und den Namen der Datei in einer deterministischen Art und Weise der direkte Zugriff bestimmen ist schneller als das, was eine Datenbank tut, was in etwa lautet:

  • Zugriff auf eine Reihe von Indexeinträgen, um zu
  • Zugriff eine Reihe von Tabellenzeilen (RDBMS typischerweise Blöcke gelesen, die mehrere Zeilen enthalten), um zu
  • eine einzelne Zeile aus dem Block auszuwählen.

Wenn man es betrachtet: Sie haben Indizes und zusätzliche Zeilen im Speicher, die Ihre Caching ineffizient machen, wo die die Beschleunigung eines db sollte von kommen

?

Datenbanken sind für den allgemeinen Fall. Aber wenn Sie einen Sonderfall, gibt es fast immer eine spezielle Lösung, die besser in einem gewissen Sinne ist.

Wenn Sie sind bevorzugt mit RDBMS gehen weg, warum nicht u versuchen, den anderen Open-Source-Schlüsselwert oder ein Dokument DBs (Non- relationale DBs) ..

Von ur Posting verstehe ich, dass ur keine ACID-Eigenschaften relationalen db folgen goin .. es wäre besser, anderen Schlüsselwert dbs anzupassen (mongodb, coutchdb oder hyphertable) anstelle der eigenen Dateisystem-Implementierung .. es wird gibt eine bessere Leistung als die bisherigen Ansätze ..

Hinweis: Ich bin nicht auch Experte in diesem .. habe gerade angefangen auf MongoDB arbeiten und nützlich in ähnlichen Szenarien zu finden. wollte nur für den Fall, teilen u r nicht bewusst, diese Ansätze

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