Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Performantes auslesen von Text - File oder DB?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Performantes auslesen von Text - File oder DB?

    Hallo und guten Morgen!

    Ich habe mal eine ganz generelle Frage:
    Da ich momentan an einem riesigen Projekt sitze und die Übersetzung mache, habe ich mir die Frage gestellt, was performanter ist:
    Die gute, alte language-file, mit der ich aktuell arbeite (in ihr stehen alle Texte in [bis dato] 2 Sprachen), die ~12.000 Zeilen hat, ODER wenn ich die Inhalte der language-file in einer DB-Tabelle verstauen würde.
    Die 12.000 Zeilen sind auch längst noch nicht alles, da kommt noch einiges zu!
    Ist eine Tabelle dafür zu übertrieben, oder sollte man die Überlegung doch wagen?

    Ich freue mich auf eure Gedanken, die ihr diesbezüglich mit mir teilt

    Schönen Start in die Woche noch euch allen!!
    sigpic


  • #2
    Da du aus einer Datenbanktabelle notfalls auch eine Cache-Datei generieren kannst, umgekehrt jedoch eher nicht, spricht das für eine DB.
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar


    • #3
      Spricht nur diese Tatsache alleine dafür oder gibt es auch performante Ansätze?

      Oder auch im Bezug auf die Größe der File/Tabelle.
      Wie gesagt, momentan gibt es in der File ~12.000 Zeilen Text, das ist aber noch längst nicht alles, denn es wird noch einiges hinzukommen.
      Selbst nach fertigstellung der aktuellen Übersetzung wird stetig neuer Text hinzugefügt.
      Eignet sich dann für so viele "Datensätze" eher eine File oder ebenfalls eine Tabelle?
      Lieber eine ganze Tabelle in einer DB vollmüllen oder eine File vollmüllen?
      sigpic

      Kommentar


      • #4
        12k Zeilen?! Das lässt sich doch sicher auf mehrere Dateien verteilen, z. B. abhängig vom Einsatzgebiet..

        Ich würde mal sagen, die Entscheidung DB/File hängt von Deiner Vorliebe und den Anforderungen ab. Kann man z.B. gettext auch über die DB machen? Allerdings sollte das alles kein Problem sein, wenn man den Zugriff auf die Übersetzungen kapselt. Dann kann man sich später immer noch anders entscheiden..

        Kommentar


        • #5
          Spantan würde ich auch zu DB tendieren. Ein Filezugriff auf die Platte ist in der Regel langsamer als eine Db Abfrage.
          "My software never has bugs, it just develops random features."
          "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

          Kommentar


          • #6
            Zitat von Paul.Schramenko Beitrag anzeigen
            Ein Filezugriff auf die Platte ist in der Regel langsamer als eine Db Abfrage.
            Wie kommst du da drauf? Eine Datenbank speichert seine Daten auch in im Filesystem, muss also mindestens auch einen Dateizugriff machen (meist mehr).

            Kommentar


            • #7
              Ein tolles Thema ^_^
              Japp, DB ist auch File-System.
              12k Zeilen?! Das lässt sich doch sicher auf mehrere Dateien verteilen, z. B. abhängig vom Einsatzgebiet.
              *rechtgeb* -> Mehr Unterteilungen -> Baumstruktur dürfte das ganze etwas schneller gestalten
              [Menü1] -> Begriff1, Begriff2, Begriff3, Begriff4...
              [Menü2] -> Begriff5, Begriff6, Begriff7, Begriff8...

              Jetzt muss mann nur noch die Objekte zuweisen

              Kommentar


              • #8
                Danke für all eure tollen Antworten ^^
                Also ist es, performance-mäßig, egal ob ich es direkt alles in eine file oder in eine DB-Tabelle speichere?
                Falls ja, dann kann ich die Struktur hier beibehalten.
                Wenn ich mal viel Zeit habe, dann kann ich mal schauen, ob ich es über mehrere Dateien verstreuen kann, so wie ihr empfohlen habt
                sigpic

                Kommentar


                • #9
                  Zitat von Flor1an Beitrag anzeigen
                  Wie kommst du da drauf? Eine Datenbank speichert seine Daten auch in im Filesystem, muss also mindestens auch einen Dateizugriff machen (meist mehr).
                  Das ist klar, aber eine datei komplett einzulesen und dann zu suchen ist in der Regel langsamer als aus der Db die direkt benötigten Daten zu holen. Das die Datenbank die Daten auf der Platte speichert ist ja klar. Zumindest habe bisher immer das Gefühl gehabt.
                  "My software never has bugs, it just develops random features."
                  "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                  Kommentar


                  • #10
                    Zitat von Sniper_Kotaro Beitrag anzeigen
                    Also ist es, performance-mäßig, egal ob ich es direkt alles in eine file oder in eine DB-Tabelle speichere?
                    Jain, so würde ich das auf keinen Fall sagen! Die Datenbank hat den Vorteil, dass du performant auf Datensätze zugreifen kannst samt Sortierung, Gruppierung und mehr und den Nachteil, dass die Abfragesprache einen gewissen Overhead mitsichbringt. Mit einem eigenen Filesystem kannst du diese Teile selbstverständlich auch implementieren, aber dabei viele Fehler machen, die die Performance stark nach unten drücken...

                    Die Funktionen file() und file_get_contents() mögen z.B. leicht zu handeln sein, aber wenn du damit diese Menge an Daten ließt oder auf andere Weise immer komplette Dateien einließt, dann wirst du mit einer Datenbank sicherlich schneller sein.
                    Hast du hingegen Metainformationen in der Datei hinterlegst, sodass du den Zeiger an die richtige Position setzen kannst und dadruch nur die erforderlichen Daten ausließt, dann kann diese Methode schneller sein!

                    Kommentar


                    • #11
                      Ich selber speicher die "Sprachvariablen" in Datenbank. Dazu kommt dann eine Kreuztabelle mit Verknüpfungen. So weiss ich später, welche Sprachvariable auf welcher Seite benötigt wird. Den Vorteil darin sehe ich in der Performance, da ich nicht bei jedem Seitenaufruf 12000 Einträge auslesen muss, sondern eben nur die, die ich auch wirklich benötige. Das wird dann gecached und ich habe schön kleine Dateien.

                      Kommentar


                      • #12
                        Hey, die Debatte geht ja heiß her

                        Also auch ich lese nicht die komplette Datei ein, da kann ich euch beruhigen!
                        Meine Sprachdatei ist folgendermaßen aufgeteilt:
                        $mainlang = array(
                        "GEBIET" => array(
                        "INHALT" => array(
                        "de" => "DEUTSCHER INHALT",
                        "en" => "ENGLISCHER INHALT")
                        )
                        )

                        Wenn ich jetzt einen bestimmen Eintrag selektieren will, dann schreibe ich:
                        $lang->get("GEBIET", "INHALT"), und schon hätte ich, je nach konfiguration des Systems entweder den Test "DEUTSCHER INHALT" oder "ENGLISCHER INHALT".

                        War das verständlich? ^^
                        Sieht ziemlich wirr aus, was?
                        sigpic

                        Kommentar


                        • #13
                          Zitat von Sniper_Kotaro Beitrag anzeigen
                          Also auch ich lese nicht die komplette Datei ein
                          Sondern ...?

                          Wenn ich jetzt einen bestimmen Eintrag selektieren will, dann schreibe ich:
                          $lang->get("GEBIET", "INHALT"), und schon hätte ich, je nach konfiguration des Systems entweder den Test "DEUTSCHER INHALT" oder "ENGLISCHER INHALT".
                          Und wie kommt diese Funktion an die Werte, ohne die komplette Textdatei einzulesen?

                          Kommentar


                          • #14
                            Ok stimmt, falsch gedacht
                            sigpic

                            Kommentar


                            • #15
                              Ich habe vor kurzem schon mal irgendwo geschrieben, wie ich es mache. Kurz gesagt: Speichern in der DB, DEFAULTS mit *, Abfrage gruppieren nach SPrache und Kontext (eine Seite kann durchaus mehrere Kontexte anfordern, immer aber den globalen), Cachen dieser Kombination (Sprache, Kontexte) als serialisiertes Objekt.
                              --

                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                              --

                              Kommentar

                              Lädt...
                              X