Was sind die Best Practices zum Erstellen von Flatfile-Datenbankstrukturen in PHP?
Es gibt viele ausgereiftere PHP-Flatfile-Frameworks, bei denen ich versuche, eine SQL-ähnliche Abfragesyntax zu implementieren, die für meine Zwecke in den meisten Fällen übertrieben ist. (Ich würde zu diesem Zeitpunkt nur eine Datenbank verwenden).
Gibt es irgendwelche eleganten Tricks, um eine gute Leistung und Funktionen mit einem kleinen Code-Overhead zu erzielen?
for loop
(es sei denn, ich verwende alle Daten im Ordner), daher ist die Leistung viel schneller als bei einer Datenbank. Ich würde ins Detail gehen und eine sehr gute Antwort geben, aber leider ist diese Frage geschlossen.Antworten:
Nun, was ist die Natur der flachen Datenbanken. Sind sie groß oder klein? Sind es einfache Arrays mit Arrays? Wenn es etwas Einfaches ist, sagen Sie, dass Benutzerprofile als solche erstellt wurden:
und um den Datenbankdatensatz für diesen Benutzer zu speichern oder zu aktualisieren .
und um den Datensatz für den Benutzer zu laden
Diese Implementierung hängt jedoch wiederum von der Anwendung und der Art der benötigten Datenbank ab.
quelle
Sie könnten SQLite in Betracht ziehen . Es ist fast so einfach wie Flatfiles, aber Sie erhalten eine SQL-Engine zum Abfragen. Es funktioniert auch gut mit PHP .
quelle
Meiner Meinung nach ist die Verwendung einer "Flat File Database" in dem Sinne, wie Sie es meinen (und die Antwort, die Sie akzeptiert haben), nicht unbedingt der beste Weg, um Dinge zu erledigen. Zuallererst kann die Verwendung von
serialize()
undunserialize()
kann MAJOR Kopfschmerzen verursachen, wenn jemand in die Datei eindringt und sie bearbeitet (er kann tatsächlich jedes Mal willkürlichen Code in Ihre "Datenbank" einfügen, der ausgeführt wird.)Persönlich würde ich sagen - warum nicht in die Zukunft schauen? Es gab so viele Male, dass ich Probleme hatte, weil ich meine eigenen "proprietären" Dateien erstellt habe und das Projekt so weit explodiert ist, dass es eine Datenbank benötigt, und ich denke "Sie wissen, ich wünschte Ich hatte dies für eine Datenbank geschrieben, um mit "zu beginnen - weil das Refactoring des Codes viel zu viel Zeit und Mühe kostet.
Daraus habe ich gelernt, dass die Zukunftssicherung meiner Anwendung, damit sie nicht tagelang umgestaltet werden muss, wenn sie größer wird, der Weg in die Zukunft ist. Wie mache ich das?
SQLite. Es funktioniert als Datenbank, verwendet SQL und ist ziemlich einfach auf mySQL umzustellen (insbesondere, wenn Sie abstrahierte Klassen für die Datenbankmanipulation verwenden, wie ich es tue!).
Insbesondere mit der Methode "Akzeptierte Antwort" kann die Speichernutzung Ihrer App drastisch reduziert werden (Sie müssen nicht alle "RECORDS" in PHP laden).
quelle
serialize()
kann auch dafür ziemlich nützlich sein. Ich denke, der Trick, um ein funktionsfähiges System zu entwickeln, besteht darin, einen Weg zu finden, die Datenknoten zu indizieren, ohne sich selbst mit Komplexität zu töten.Ein Framework, das ich in Betracht ziehe, wäre eine Blogging-Plattform. Da fast jede mögliche Ansicht von Daten, die Sie möchten, nach Datum sortiert wäre, habe ich über diese Struktur nachgedacht:
Ein Verzeichnis pro Inhaltsknoten:
Unterverzeichnisse jedes Knotens einschließlich
Sowie einfache Textdateien im Knotenverzeichnis für vor- und nachgerenderte Inhalte und dergleichen.
Dies würde es einem einfachen PHP-
glob()
Aufruf (und wahrscheinlich einer Umkehrung des Ergebnisarrays) ermöglichen, nahezu alles innerhalb der Inhaltsstruktur abzufragen:Würde Pfade zurückgeben, einschließlich aller Artikel, die mit "lustig" markiert sind.
quelle
Hier ist der Code, den wir für Lilina verwenden:
Jeder Eintrag wird als separate Datei gespeichert, die für die Verwendung effizient genug ist (es werden keine nicht benötigten Daten geladen und das Speichern ist schneller).
quelle
Wenn Sie eine flache Datei verwenden, um Daten zu speichern, verwenden Sie XML, um die Daten zu strukturieren. PHP verfügt über einen integrierten XML-Parser .
quelle
Wenn Sie ein für Menschen lesbares Ergebnis wünschen, können Sie auch diesen Dateityp verwenden:
Auf diese Weise haben Sie nur eine Datei, können diese leicht debuggen (und manuell reparieren), später (am Ende jeder Zeile) Felder hinzufügen und der PHP-Code ist einfach (für jede Zeile entsprechend | aufgeteilt).
Der Nachteil ist jedoch, dass Sie die gesamte Datei analysieren sollten, um etwas zu durchsuchen (wenn Sie Millionen von Einträgen haben, ist dies nicht in Ordnung) und das Trennzeichen in Daten behandeln sollten (z. B. wenn der Nick WaR | ordz ist).
quelle
Ich habe zwei einfache Funktionen geschrieben, um Daten in einer Datei zu speichern. Sie können selbst beurteilen, ob dies in diesem Fall nützlich ist. Der Punkt ist, eine PHP-Variable (wenn es sich entweder um ein Array, eine Zeichenfolge oder ein Objekt handelt) in einer Datei zu speichern.
quelle
Dieser ist als praktische Lösung inspirierend:
https://github.com/mhgolkar/FlatFire
Es werden mehrere Strategien zum Umgang mit Daten verwendet ...
[Aus Readme-Datei kopiert]
Frei oder strukturiert oder gemischt
quelle
IMHO, Sie haben zwei Möglichkeiten, wenn Sie vermeiden möchten, etwas selbst zu brauen:
SQLite
Wenn Sie mit PDO vertraut sind, können Sie einen PDO-Treiber installieren, der SQLite unterstützt. Ich habe es nie benutzt, aber ich habe PDO eine Tonne mit MySQL benutzt. Ich werde dies bei einem aktuellen Projekt ausprobieren.
XML
Dies wurde für relativ kleine Datenmengen mehrmals durchgeführt. XMLReader ist eine leichte, vorwärtsgelesene Klasse im Cursor-Stil. SimpleXML macht es einfach, ein XML-Dokument in ein Objekt einzulesen, auf das Sie wie auf jede andere Klasseninstanz zugreifen können.
quelle
Ich möchte nur auf ein potenzielles Problem mit einer Flatfile-Datenbank mit diesem Systemtyp hinweisen:
...etc
Das Problem ist, dass die Zellendaten ein "|" oder ein "\ n", dann gehen die Daten verloren. Manchmal ist es einfacher, durch Buchstabenkombinationen zu teilen, die die meisten Menschen nicht verwenden würden.
Beispielsweise:
Säulensplitter:
#$% (Shift+345)
Zeilensplitter:
^&* (Shift+678)
Textdatei:
test data#$%blah blah#$%^&*new row#$%new row data 2
Dann benutze:
explode("#$%", $data); use foreach, the explode again to separate columns
Oder irgendetwas in diese Richtung. Ich möchte auch hinzufügen, dass Flatfile-Datenbanken für Systeme mit kleinen Datenmengen (dh weniger als 20 Zeilen) gut sind, für größere Datenbanken jedoch zu großen Speicherfressern werden.
quelle