hilker: mich würde Interessieren...

wie die Datenbank-Abfrage für die Funktion: "Postings eines bestimmten Users ausblenden" gelöst ist!
Find ich interessant, da ich sowas auch schon mehrfacht durchdacht habe.

Gruß, Markus

  1. Hi,

    Tipp ins Blaue: Gar nicht. Soweit ich mich erinnern kann, ist dieses Forum nicht auf einer Datenbank gebaut.

    Ansonsten ist es doch eigentlich recht trivial:

      
    SELECT Posting  
      FROM Postings  
      WHERE NOT (Author IN  
                  (SELECT Author FROM Blacklist))  
    
    

    Da die Blacklist "persönlich" ist, gäbe es dann dort noch eine weitere WHERE Klausel à la  WHERE BlacklistingUser = @currentLoggedInUser

    Was für eine Vorstellung hattest oder hast du denn?

    Ciao, Frank

    1. Was für eine Vorstellung hattest oder hast du denn?

      Ich hätte es wohl mit einem LEFT JOIN blacklist versucht und entsprechender Aussortierung in der WHERE Klausel.

      Irgendwie hab ich keinen Vertrag mit Subselects :)

      Ciao, Frank

      ciao!

      1. Je nach Datenbanksystem (und dessen Intellenz im Optimieren) solltest du die Aussortierung bereits in der Join Klausel verankern.

        Mit Unterabfragen muss man keinen Vertrag haben um sie nutzen. Ich hab auch keinen Pakt mit Mephisto geschlossen ;)

        Cheers, Frank

    2. Hi,

      Tipp ins Blaue: Gar nicht. Soweit ich mich erinnern kann, ist dieses Forum nicht auf einer Datenbank gebaut.

      richtig vermutet; das wäre wohl sonst auch um einiges langsamer als C.

      freundliche Grüße
      Ingo

      1. Hi,

        Tipp ins Blaue: Gar nicht. Soweit ich mich erinnern kann, ist dieses Forum nicht auf einer Datenbank gebaut.
        richtig vermutet; das wäre wohl sonst auch um einiges langsamer als C.

        Wäre auch interessant zu wissen, wie dann die ganzen Daten abgespeichert werden. Werden alle Threads in eigene C-Module geschrieben, die dann gleich kompiliert werden?

        mfG,
        steckl

        1. Hi,

          Wäre auch interessant zu wissen, wie dann die ganzen Daten abgespeichert werden.

          ganz einfach als xml-Dateien.

          freundliche Grüße
          Ingo

          1. Hi,

            Wäre auch interessant zu wissen, wie dann die ganzen Daten abgespeichert werden.
            ganz einfach als xml-Dateien.

            Ist es schneller Daten aus einer xml-Datei auszulesen, als aus einer Datenbank? Oder hat es andere Gründe, dass keine DB verwendet wird?
            Mit C könnte man ja auch auf Datenbanken zugreifen.

            mfG,
            steckl

            1. Moin!

              Ist es schneller Daten aus einer xml-Datei auszulesen, als aus einer Datenbank? Oder hat es andere Gründe, dass keine DB verwendet wird?

              Eine DB wird nicht benötigt, weil alles XML mehr oder weniger nur einmalig geschrieben und gelesen wird. Die aktiven Forumsdaten liegen im RAM.

              Und wenn das XML nur (Sicherheits-)kopie ist, wozu dann eine Datenbank?

              - Sven Rautenberg

              --
              "Love your nation - respect the others."
              1. Hi,

                Eine DB wird nicht benötigt, weil alles XML mehr oder weniger nur einmalig geschrieben und gelesen wird. Die aktiven Forumsdaten liegen im RAM.

                Das ist mir dann wohl doch (noch) etwas zu hoch.
                Nach meinem Verständnis müsste jeder neue Forumseintrag neu dazugelinkt (wenn nicht sogar alles neu kompiliert) werden, so dass anschließend jedesmal alles neu in den RAM geschrieben werden müsste.
                Ist diese Vermutung falsch?

                Und wenn das XML nur (Sicherheits-)kopie ist, wozu dann eine Datenbank?

                Wird für das Archiv auch keine Datenbank verwendet? Die gesamten Daten wären wohl zu umfangreich, um sie immer im RAM zu halten?

                mfG,
                steckl

                1. Moin!

                  Das ist mir dann wohl doch (noch) etwas zu hoch.
                  Nach meinem Verständnis müsste jeder neue Forumseintrag neu dazugelinkt (wenn nicht sogar alles neu kompiliert) werden, so dass anschließend jedesmal alles neu in den RAM geschrieben werden müsste.
                  Ist diese Vermutung falsch?

                  Ja, komplett.

                  Es gibt zwei RAM-Bereiche (shared memory), in die wechselseitig entsprechende Datenstrukturen geschrieben werden. Nach einer Schreiboperation wird der dann neu ergänzte Bereich zum Lesen (das passiert viel häufiger, als Schreiben) genutzt, der zweite Bereich wird zum nächsten Schreibvorgang vorbereitet.

                  Genaueres weiß ich aber auch nicht.

                  Und wenn das XML nur (Sicherheits-)kopie ist, wozu dann eine Datenbank?

                  Wird für das Archiv auch keine Datenbank verwendet?

                  Nein, wozu? Die Threads liegen als XML vor, und damit die Auslieferung schneller geht, gibt es noch einen Cache, in dem ein Zwischenwandlungsergebnis abgelegt ist.

                  Die gesamten Daten wären wohl zu umfangreich, um sie immer im RAM zu halten?

                  Guck dir den Umfang der Archivdaten in der Suche an, dann beantwortet sich das von selbst.

                  Die RAM-Speicherung geschieht nur, weil das die schnellste Methode ist, den Schreibvorgang, der Locking erfordert, über die Bühne zu kriegen. Unsere alte Forumssoftware hatte noch Dateien verwendet - und war am "Ende" wegen intensiver Forumsnutzung eklig lahm geworden.

                  - Sven Rautenberg

                  --
                  "Love your nation - respect the others."
                  1. Hi,

                    Ist diese Vermutung falsch?

                    Ja, komplett.

                    Naja, 'nen Versuch war es wert. ;)

                    Es gibt zwei RAM-Bereiche (shared memory), in die wechselseitig entsprechende Datenstrukturen geschrieben werden. Nach einer Schreiboperation wird der dann neu ergänzte Bereich zum Lesen (das passiert viel häufiger, als Schreiben) genutzt, der zweite Bereich wird zum nächsten Schreibvorgang vorbereitet.

                    Kapier ich nicht, aber hört sich interessant an.

                    Ich werd mich mal etwas zum Thema shared memory informiren, gibt es noch andere Suchbegriffe zu dem Thema?

                    mfG,
                    steckl

                    1. Moin!

                      Ich werd mich mal etwas zum Thema shared memory informiren, gibt es noch andere Suchbegriffe zu dem Thema?

                      Es gibt das SVN-Repository mit dem Quellcode auf Christian Kruses Webspace.

                      - Sven Rautenberg

                      --
                      "Love your nation - respect the others."
                      1. Hi,

                        Es gibt das SVN-Repository mit dem Quellcode auf Christian Kruses Webspace.

                        Danke, ich hab des Repository gefunden.
                        Werd mir vielleicht die nächsten Tage den Code mal anschaun.

                        mfG,
                        steckl

                2. Hallo steckl,

                  Die aktiven Forumsdaten liegen im RAM.
                  Nach meinem Verständnis müsste jeder neue Forumseintrag neu dazugelinkt (wenn nicht sogar alles neu kompiliert) werden, so dass anschließend jedesmal alles neu in den RAM geschrieben werden müsste.
                  Ist diese Vermutung falsch?

                  Ja. Stell es Dir vor wie der sehr vereinfachte Vergleich mit Kurz- und Langzeitgedächtnis. Die XML-Dateien sind das Langzeitgedächtnis des Forums. Wenn die Forumssoftware nun startet, liest sie das Langzeitgedächtnis (die XML-Dateien der aktiven Threads) aus und packt diese Informationen in ihr Kurzzeitgedächtnis (das RAM), einfach, weil sie dort einen sehr viel schnelleren Zugriff hat, anstatt sich langfristig erinnern zu müssen. Und neu zum RAM-Speicher hinzugefügt Daten werden dann in die XML-Dateien wieder gespeichert, damit man keinen Datenverlust hast.

                  Das kann natürlich nur funktionieren, wenn die Forumssoftware nicht für jeden Request aufgerufen und wieder beendet wird, wie CGI-Programme. Stattdessen ist sie im Client-Server-Modell implementiert. Für obiges zuständig ist der Forumsdämon (fo_server, wenn ich mich recht erinnere), der einmal gestartet wird und dann durchläuft. Mit dem kommunizieren dann nach Bedarf Clients wie fo_view (zuständig für die Darstellung) und fo_post (fürs Posten) die in das Kurzeitgedächtnis von fo_server zum schnellen Auslesen und Schreiben nutzen.

                  (Wenn ich das noch richtig in Erinnerung habe)

                  Tim

                3. Hallo steckl,

                  Nach meinem Verständnis müsste jeder neue Forumseintrag neu dazugelinkt (wenn nicht sogar alles neu kompiliert) werden, so dass anschließend jedesmal alles neu in den RAM geschrieben werden müsste.
                  Ist diese Vermutung falsch?

                  ja, denn du verwechselst anscheinend Code und Daten. Programmcode, also die Anweisungen über den Programmablauf, wird compiliert und gelinkt. Die Daten, mit denen das Programm arbeitet, unterliegen komplett der Kontrolle des Programms selbst.

                  Wird für das Archiv auch keine Datenbank verwendet? Die gesamten Daten wären wohl zu umfangreich, um sie immer im RAM zu halten?

                  Soweit ich mitbekommen habe, wird auch das Forumsarchiv in XML-Dateien gehalten, aber nicht im RAM.

                  So long,
                   Martin

                  --
                  Wer im Steinhaus sitzt, soll nicht mit Gläsern werfen.