Ankündigung

Einklappen
Keine Ankündigung bisher.

Ersatz für MySQL bei Prozessverwaltung gesucht (Viele zeitgleiche Schreibzugriffe)

Einklappen

Neue Werbung 2019

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

  • #16
    annando Threaded? Noch nie gehört. Ne, die Thread Klasse, wie in Java. Aber ja, hast schon die richtige Extension gefunden. pthreads bindet Java auch ein soviel ich weiß. Die Klassen sehen jedenfalls gleich aus. Pecl brauchst Du nicht, müsste auch mit phpize und make gehen, ähnlich wie bei XDebug. Also von den Sourcen kompilieren halt. Als vorgefertigtes Paket gibt es das anscheinend nicht. Sollten aber diverse Linux Distributionen trotzdem vorkompiliert haben als PHP Extension.
    Die pthreads Extension ist schon seit Jahren de-facto Standard, sollte also keine Probleme bereiten.

    Kommentar


    • #17
      erc Ich bremse jetzt mit Hilfe von Semaphoren: https://github.com/friendica/friendi....php#L711-L720

      Das hat auf alle Fälle für einen merklichen Leistungsschub gesorgt.

      derwunner Das Problem ist, dass ich bei jeder Programmierung, die eine externe Komponente voraussetzt, eine Ersatzprogrammierung schreiben muss, so dass das System auch ohne diese Komponente läuft. Deswegen denke ich, dass ich jetzt zunächst ein Blick auf das Message-System werfen werde. Mit Hilfe der Semaphoren kann dann einer der Worker-Prozesse zum Task-Scheduler auserkoren werden, der für die anderen Worker die auszuführenden Aufgaben zusammenstellt. Das dürfte dann auch besser skalieren.

      Kommentar


      • #18
        Zitat von annando Beitrag anzeigen
        erc Ich bremse jetzt mit Hilfe von Semaphoren: https://github.com/friendica/friendi....php#L711-L720

        Das hat auf alle Fälle für einen merklichen Leistungsschub gesorgt.
        Weil die Schreibzugriffe damit sequentiell statt finden. Ich würde auf jedenfall noch ein sleep mit rein setzen, wenn es nix zu tun gibt. (z.B. 250ms)

        Kommentar


        • #19
          Ich hab übrigens gerade - dank der Hinweise dieses Forums praktisch die "Handbremse" gefunden. Ich hatte das Setzen der "pid"-Werte in eine einzige Update-Query gepackt - die ging aber über einen großen Bereich, also mussten viele Datensätze gesperrt werden. Ich habe jetzt das Ermitteln der zuzuweisenden Queue-Einträge und das Zuweisen selber in zwei getrennte Queries gepackt. Da sich die Update-Query zum Zuweisen auf den Primary Key bezieht, werden nur sehr gezielte Bereiche gesperrt.

          Das Ergebnis ist mindestens eine Verdopplung der Geschwindigkeit. Bei der ganzen Sache haben auch die Semaphore geholfen, die ich jetzt dank des Forums kenne.

          erc Wenn es nichts zu tun gibt, beenden sich die Worker von alleine. Sie werden dann wieder hochgefahren, sobald Arbeit ansteht.

          Kommentar


          • #20
            Am Rande:
            PHP-Code:
            function poller_run($argv$argc){
                global 
            $a$db$poller_up_start
            global gilt als bad practice. Spätestens wenn du dich in Richtung OOP bewegst werden dir die globals große Probleme bereiten.

            Kommentar


            • #21
              jspit wir sind derzeit in der Refactoring-Phase mit Autoloader und Co. Der Poller ist noch Teil der alten Code-Struktur. Im Zuges des Refactorings wird das natürlich auch alles bereinigt.

              Kommentar

              Lädt...
              X