Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu einem Project 1 Cronjob pro User

Einklappen

Neue Werbung 2019

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

  • Frage zu einem Project 1 Cronjob pro User

    Hallo zusammen,

    mein Project ist schon recht weit und ich prüfe noch einmal den Aufbau. Meine Frage wurde durch meinen Hoster leider nur sehr wage beantwortet. Daher wollte ich nach euren Erfahrungen fragen.

    1. Das Project ist ein CMS gestütztes Joomla Projekt.
    2. Zum Einsatz kommt eine MySQL
    3. Jeder Benutzer bekommt derzeit bis zu 7 eigene Tabellen für die Verarbeitung von Daten
    4. Jeder Benutzer soll mind. einen Cronjob zur Verfügung haben, der Daten verarbeiten kann
    5. Es werden recht viele Daten eingelesen, aber nacheinander (Zeile für Zeile)
    7. CSV wird hochgeladen, Verarbeitung, Export

    Meine initiale Überlegung: "Was, wenn MySQL eine Grenze für die TABLES hat?". Aber da sollen wohl sehr viele möglich sein (4Billion??).

    Meine zweite Frage wäre, ob und wie ich das am besten organisiere, wenn mein Server, auf dem sich alles absppielt, am Limit ist, was Cronjobs angeht?
    Könnte z.B. ein zweiter Rechner die Last übernehmen und quasi auf die selbe Datenbank dazu geschaltet werden?

    Oder gibt es ab einer bestimmten größe prof. Lösungen, um die Last zu verteilen und die Stabilität der DB zu gewährleiten?

    Ich werde zu Anfang einen skalierbaren Server nehmen (einen eigenen bei einem Hoster).

    Danke.


  • #2
    Zitat von knuffiwuffi Beitrag anzeigen
    3. Jeder Benutzer bekommt derzeit bis zu 7 eigene Tabellen für die Verarbeitung von Daten
    Klingt irgendwie nach einem Fehlkonzept. Warum können sich Benutzer nicht Tabellen teilen?

    Kommentar


    • #3
      Die Benutzer teilen sich Tabellen. Die wichtigen. Die Aufbereitung der CSV läuft in benutzerspezifischen Tabellen. Diese Daten sind bewusst getrennt.

      Kommentar


      • #4
        Sieht dann in etwas so aus:

        - table_system_1
        - table_system_2
        - table_system_3
        - table_user_1_import
        - table_user_1_export
        - table_user_2_import
        - table_user_2_export

        Kommentar


        • #5
          Meine initiale Überlegung: "Was, wenn MySQL eine Grenze für die TABLES hat?". Aber da sollen wohl sehr viele möglich sein (4Billion??).
          https://lmgtfy.com/?q=mysql%20max%20...tabase&p=1&s=g


          Meine zweite Frage wäre, ob und wie ich das am besten organisiere, wenn mein Server, auf dem sich alles absppielt, am Limit ist, was Cronjobs angeht?
          Könnte z.B. ein zweiter Rechner die Last übernehmen und quasi auf die selbe Datenbank dazu geschaltet werden?

          Oder gibt es ab einer bestimmten größe prof. Lösungen, um die Last zu verteilen und die Stabilität der DB zu gewährleiten?
          lange zweite frage ....

          ad a:
          siehe oben
          ad b:
          ja
          ad c:
          ja

          gegenfargen

          1
          mit wieviel usern rechnest du

          a - gleichzeitig
          b - insgesamt

          Bei Deiner Appllikation

          2.)

          Ab welcher anzahl von usern willst oder kannst Du dir teil-/ vollzeit brauchbare hilfe für die adminstration deines db/webspace/whatever clusters leisten

          3.)

          ab welcher anzahl user hälst Du ein eigenes Rechenzetrum für notwendig

          4.)

          welche anzahl user kannst du mit deinem homepc zwölf kerne/32GB Ram/20TB storage abfackeln

          Kommentar


          • #6
            Zitat von knuffiwuffi Beitrag anzeigen
            Sieht dann in etwas so aus:

            - table_system_1
            - table_system_2
            - table_system_3
            - table_user_1_import
            - table_user_1_export
            - table_user_2_import
            - table_user_2_export
            Das sieht in jeder Hinsicht falsch aus.

            Tabellen sollten nicht pro Nutzer angelegt werden und auch entsprechend benannt werden. Der Präfix table für Tabelle ist auch nicht zu verwenden.
            Das Design der Datenbank sollte im laufenden Betrieb nicht mehr angefasst werden, heisst, es kommen keine Tabellen hinzu!

            Schau dir dazu auch mal das Thema Normalisierung an.

            Kommentar


            • #7
              Zitat von knuffiwuffi Beitrag anzeigen
              Hallo zusammen,

              ...

              Danke.
              Gegenfragen:
              1. Gibt es einen ersten Entwurf der DB? Falls ja, bitte DB-Dump hier einstellen.
              2. Was ist der Sinn und Zweck des Ganzen? Willst du praktisch Webspace zur Verwaltung durch die User nach bestimmten Regeln zur Verfügung stellen oder was?
              3. Haben die Tabellen table_system_1, table_system_2 usw. die gleiche Struktur?
              Soweit.

              Kommentar


              • #8
                Erst einmal Danke für eure Antworten...

                [1] Mit wievielen Usern rechnest Du

                Ich rechne Anfangs mit < 100 Benutzern, im ersten Jahr eher 2 bis 5. Jeder Benutzer sollte mind. einen Cronjob zur Verfügung haben, der die Arbeit übernimmt. Die Cronjobs sollten parallel laufen, da diese horchen, ob es neue Arbeit gibt, die der jeweilige Benutzer eingestellt hat. Projekt als Hobby/Arbeitserleichterung in der Freizeit gestartet.

                [2] Ab welcher anzahl von usern willst oder kannst Du dir teil-/ vollzeit brauchbare hilfe für die adminstration deines db/webspace/whatever clusters leisten

                Die Administration würde ich selber übernehmen. Prof. Hilfe dann, wenn ich die Anforderungen nicht mehr alleine erfüllen kann oder eine prof. Softwarelösung her muss, um die Last zu verteilen. Ab 10 - 20 Benutzern dürfte es schon möglich sein, prof. Hilfe zu finanzieren, sofern erforderlich.

                [3] Ab welcher anzahl user hälst Du ein eigenes Rechenzetrum für notwendig

                Das Projekt wird von anfang an auf einem eigenen skalierbaren Server laufen (Hoster / JiffyBox).

                [4] In der Tat noch nicht ausprobiert. Ich würde, wenn das Projekt für einen ersten Test lauffähig ist, die Performance unter Last auf dem angemieteten Server auswerten/prüfen. Ein Cronjob kann durchaus bis zu 3 Tage laufen und dabei 500.000 Datenzeilen schreiben. Unterbrechungen des Cron sind nicht schlimm, da dieser immer dort weiter macht, wo er aufgehört hat. Würde der Cronjob unterbrechen, habe ich eine LOG Tabelle, die mir Hinweise auf mögliche Fehler gibt.

                Die Tabellen haben an den wichtigen Stellen einen Index. Da ich selber nicht so viel Erfahrung mit skalierbaren Projekten habe (serverseitig), fühlt es sich halt aktuell so an, als ob ich lieber noch ein wenig Grundlagenforschung betreiben sollte, um später keinen Flaschenhals zu erhalten. Ab einem bestimmten Zeitpunkt könnte ich mir sogar vorstellen, den code einmal prof. einschätzen und ggf. korrigieren zu lassen. Ich bin absolut kein Profi, bekomme aber immer mein Ergebnis und habe mir eine gute Entwicklungsumgebung (Framework) gebastelt.

                =====

                [1] Gibt es einen ersten Entwurf der DB? Falls ja, bitte DB-Dump hier einstellen.

                Ja, aber die Struktur möchte ich aktuell noch überarbeiten. Möchte diese nicht 1:1 einstellen. Unten ist eine Vorschau.

                [2] Was ist der Sinn und Zweck des Ganzen? Willst du praktisch Webspace zur Verwaltung durch die User nach bestimmten Regeln zur Verfügung stellen oder was?

                Benutzer lädt eine CSV hoch, mein System verarbeitet diese, erstellt Auswertungen und einen Export.

                [3] Haben die Tabellen table_system_1, table_system_2 usw. die gleiche Struktur?

                Nein. Die Systemtabellen sind z.B.

                - system_settings
                - system_user
                - system_upload_to_do
                - system_download_to_do

                ...und dann für jeden Benutzer die Tabellen, in denen die Daten verarbeitet werden. Diese werden bei der Registrierung bereits automatisch angelegt, sofern noch nicht vorhanden:

                - user_309_upload
                - user_309_download
                - user_309_process
                - user_309_log
                - user_309_settings

                - user_401_upload
                - user_401_download
                - user_401_process
                - user_401_log
                - user_401_settings

                Kommentar


                • #9
                  Bitte nicht lachen, daß ich nur < 100 angegeben habe. Ich mache mir einfach grundsetlich Gedanken, wie die Basis eines gut skalierbaren Systems (PHP) aussieht. Zum einen, um später keinen Flaschenhals zu haben und weil es mich sehr interessiert.

                  Worauf ist zu achten? Gibt es goldene Regeln?

                  Was mir halt einfällt...

                  a) DB Index setzen
                  b) DB Feldern passende größen geben
                  c) Strukturierte Tabellennamen
                  d) Foreign Keys ggf. verknüpfen
                  e) Skalierbarer Server

                  Kommentar


                  • #10
                    wie andere schon sagten, ist das ein Faildesign, wenn Duu immer wieder neue Tabellen erstellen mußt. Mir scheint auch, Du willst dann SQL-Befehle in Schleifen durchführen, um irgendwas zu machen. Auch das ist eine direkte Abkürzung ins Chaos.
                    Je nachdem, was Du genau machen willst, mag das MySQL-Spielzeug ausreichend sein - oder auch nicht.
                    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                    Kommentar


                    • #11
                      upload, download, process, settings
                      Warum braucht jeder user dafür eine eigene Tabelle?
                      Diese Tabellen sind ja wohl immer gleich aufgebaut oder?

                      Beschreiben diese Tabellen einzelne Uploads (z.B. Link auf CSV Upload, ..) oder enthalten sie den Datenupload?

                      Kommentar


                      • #12
                        Zitat von Perry Staltic Beitrag anzeigen
                        upload, download, process, settings
                        Warum braucht jeder user dafür eine eigene Tabelle?
                        Diese Tabellen sind ja wohl immer gleich aufgebaut oder?

                        Beschreiben diese Tabellen einzelne Uploads (z.B. Link auf CSV Upload, ..) oder enthalten sie den Datenupload?
                        Die Datenaufbereitung soll für jeden Benutzer in einer eigenen Tabelle laufen. Ein Cronjob für jeden. Der Aufbau ist immer gleich. Das ist richtig.

                        Kommentar


                        • #13
                          Nachgefragt. Bei einer sehr großen Tabelle, wäre der Zugriff auf die Daten eines Benutzer schneller über eine große Tabelle, oder über 2 kleinere (pro Benutzer eine). Ich hätte gedacht, auch daß umkopieren in eine ausgelagerte Datenbank wäre einfacher, da jeder Benutzer seine eigenen Tabellen hat.

                          Kommentar


                          • #14
                            Würdest du die Grundlagen von DBMS beherrschen stellte sich die Frage erst gar nicht. Eine Tabelle ist die Antwort.

                            Dein Datenbankdesign ist immer noch fehlerhaft.

                            Die Datenaufbereitung soll für jeden Benutzer in einer eigenen Tabelle laufen.
                            Die Datenhaltung meinst du höchstwahrscheinlich und die muss in einer Tabelle erfolgen. Du brauchst also wahrscheinlich nicht mehr als 2 Tabellen, eine für die Userdaten und eine weitere wo du deine Daten aus den CSV einpflegst. Aus diesen Daten kannst du dann aufbereitet ausgeben, was auch immer du dann brauchst Eine erneute CSV, ein PDF oder einfach eine HTML Tabelle generieren.

                            Logdaten würde ich in eine Datei schreiben, ebenso die Settings, obwohl man das wohl auch in eine DB-Tabelle auslagern könnte, dies aber angesichts deines hohen Besucheraufkommens(5 User im ersten Jahr), bezweifel ich deren Vorteile.

                            Ein Cronjob für jeden.
                            auch das ist unnötig, ein Cronjob reicht.

                            Kommentar


                            • #15
                              Meine Frage war, warum braucht jeder eigene Tabellen?
                              Deine Antwort
                              Zitat von knuffiwuffi Beitrag anzeigen
                              Die Datenaufbereitung soll für jeden Benutzer in einer eigenen Tabelle laufen.
                              Wenn Du Hilfe bekommen möchtest, solltest Du schon die Rückfragen beantworten oder wenigstens erklären, warum etwas eine unumstößliche Vorgabe ist.

                              Und da Du auch in deiner folgenden Nachfrage wieder von Tabelle je Benutzer schreibst:
                              Tabelle je Benutzer ist zu 99% konzeptionell falsch.

                              Mir fallen spontan 2 Gründe ein, warum man das wollen könnte.
                              1. Performance
                              2. besondere Privatheit

                              Beides wird auf anderen Wegen erreicht.
                              1. Partitionierung (um mal eine Möglichkeit zu nennen, die im Grunde sogar physisch mehreren Tabellen entspricht, nur unendlich eleganter ist)
                              2. Mehrschicht Zugriffslogik

                              Außerdem müsstest Du etwas an Deinen Begriffen arbeiten, was z.B. ist eine ausgelagerte Datenbank? Und was ist Umkopieren in eine solche?

                              Wenn der Aufbau Deiner CSV Dateien zur Verarbeitung in der Datenbank immer gleich ist, dann ist das ganz toll und genau das, was eine Datenbank und ein Programm gern haben.
                              Es ist außerdem ein super Grund, genau nicht je User extra Tabellen anzulegen, denn es sind eigentlich nur strukturelle Unterschiede von Informationen, die die Erzeugung und Verwendung verschiedener Tabellen erst erfordern.

                              Um Dir noch eine andere Perspektive davon zu geben, warum man nicht 2 oder mehr Tabellen von identischer Struktur anlegt:
                              Sämtlicher Code, der auf diese Tabellen zugreift, muss individuell angefertigt werden, entweder statisch oder dynamisch.
                              Ebenso gilt das für sämtliche Änderungen, die bei einer neuen Version anfallen und für sämtliche Planetensysteme wie z.B. Reporting oder anderes.


                              und noch was:
                              Wenn deine "User" zufällig sowas sein sollten wie ein Mandant,
                              wenn ein User != einem Login Account einer Web-Anwendung ist,
                              wenn es um eine technische Trennung, unterschiedliche Berechtigungen usw. geht,
                              dann würde man wohl eher verschiedene Schema verwenden, statt sich verschiedene Tabellen zu basteln.
                              Da mySQL das nicht kann, dann verschiedene Datenbanken.

                              Also versuch mal bitte Deine Idee etwas zu erläutern, je größer das Verständnis beim Leser, desto besser die Tipps.

                              Kommentar

                              Lädt...
                              X