mark: PHP: Datenbank [ ca. 200kb ] in einer Datei verwalten

Guten Abend,

ich habe ein paar Zeilen PHP-Code geschrieben, die ein Voting System ( validierung per email-Link) realisieren.

Ohne Javascript und ohne MYSQL. Die Datenbank besteht aus einem 3-dimensinalem JSON-"Array", das ich bei jeder Stimmabgabe auslese und neu schreibe.

Die Datenbank-Datei wird maximal 200kb, wenn's hoch kommt 300kb groß werden.

Nun wollte ich fragen welche Problematiken ihr da seht, bzw. ob die Umsetzung kompletter Schmarrn ist, oder ob man das durchaus so machen kann?
Kann es da zu Problemen kommet (überschreiben), wenn zufällig zwei Nutzer gleichzeitig zugreifen.

Ich brauche das voting-system nur einmal im Jahr. Ich habe nicht MYSQL verwendet, da mir das zu übertrieben für eine so kleine Anwendung schien. Außerdem kann ich so einfach den Script-Ordner via ftp löschen und mein Server ist wieder sauber. Geht auch per MYSQL relativ einfach, ich weiß.

Wollte mich nur nach eurer Einschätzung/Meinung erkundigen.

Vielen lieben Dank.

mark

  1. Tach!

    Die Datenbank besteht aus einem 3-dimensinalem JSON-"Array", das ich bei jeder Stimmabgabe auslese und neu schreibe.
    Kann es da zu Problemen kommet (überschreiben), wenn zufällig zwei Nutzer gleichzeitig zugreifen.

    Klar, wenn du das nicht durch Dateisperren verhinderst

    Ich brauche das voting-system nur einmal im Jahr. Ich habe nicht MYSQL verwendet, da mir das zu übertrieben für eine so kleine Anwendung schien.

    Dafür hättest du das Nebenläufigkeitsproblem nicht, weil MySQL sich darum kümmert.

    Außerdem kann ich so einfach den Script-Ordner via ftp löschen und mein Server ist wieder sauber. Geht auch per MYSQL relativ einfach, ich weiß.

    Du könntest SQLite nehmen, das kümmert sich meines Wissens einerseits um die Sperren, andererseits liegt die Datei ebenfalls irgendwo zum Einfach-Löschen rum.

    dedlfix.

    1. Hello,

      Dafür hättest du das Nebenläufigkeitsproblem nicht, weil MySQL sich darum kümmert.

      Das stimmt aber für Update meistens nicht, da man sich da um eine Request-Response-Request-Sperre kümmern muss.

      Zwischen Holen der Daten, Veränderung und Zurückschreiben liegen meistens ein bis mehrere Roundurns, die bei HTTP bekanntlich nicht von Haus aus gebunden sind.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://restaurant-zur-kleinen-kapelle.de
      1. Tach!

        Dafür hättest du das Nebenläufigkeitsproblem nicht, weil MySQL sich darum kümmert.
        Das stimmt aber für Update meistens nicht, da man sich da um eine Request-Response-Request-Sperre kümmern muss.
        Zwischen Holen der Daten, Veränderung und Zurückschreiben liegen meistens ein bis mehrere Roundurns, die bei HTTP bekanntlich nicht von Haus aus gebunden sind.

        So generell muss das gar nicht für sein Projekt gelten.

        Ein "UPDATE votes SET auswahlN = auswahlN + 1" hat kein Nebenläufigkeitsproblem, weil das Feld nur einfach inkrementiert wird, was komplett in einem Vorgang im DBMS stattfindet. Auch wenn er pro Stimme einfach nur einen Datensatz hinzufügt, hat er dieses Problem nicht. Ich wüsste jetzt nicht, wo hier prinzipell ein Holen mit auswärtigem Ändern und Zurückschreiben notwendig wäre.

        dedlfix.

    2. Klar, wenn du das nicht durch Dateisperren verhinderst

      Hey dedlfix, danke für den Link und danke auch an den Autor: Christian Seiler
      für den übersichtlichen Artikel. Da bin ich erst mal versorgt und werde mich
      einlesen.

  2. hi,

    Kann es da zu Problemen kommet (überschreiben), wenn zufällig zwei Nutzer gleichzeitig zugreifen.

    Die Sperren wurden schon genannt.

    Für die genannte Verwendung passt die Lösung einwandfrei, ich würde das auch so machen. Es sei denn, die Daten müssen über einen längeren Zeitraum archiviert werden, das würde ich dann mit einer DB machen (für die Statistik).

    Performance: Die PHP-Funktionen zum Serialisieren von Arrays sind, soweit ich weiß in c geschrieben, schneller geht nicht, auch wenn die Datei in den MB-Bereich wächst.

    Hotti