Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Abfragen für API

Einklappen

Neue Werbung 2019

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

  • SQL Abfragen für API

    Hallo alle zusammen,
    Wie ich ja schon an anderer Stelle geschrieben habe sind wir gerade dabei eine Firma zu gründen und eine App entwickeln zu lassen. Die Entwickler, die wir damit beauftragt haben, sind zwar ok, aber es gibt einfach gewisse Schwierigkeiten (ich möchte hier jetzt nicht näher drauf eingehen warum wir sie genommen haben, der Hauptgrund waren finanzielle Gründe und ich hätte wirklich liebend gern anders entschieden, aber das war einfach nicht drin). Das nur als kurze Erklärung warum ich folgende Frage nicht einfach an unsere Entwickler stelle.

    Unsere App greift über eine PHP API auf eine SQL Datenbank zu. Soweit so gut. Je nach App-Benutzer kann es durchaus sein, dass es (zum Beispiel für das Hauptmenü) mehrere SQL Abfragen pro Benutzer gibt (im Schnitt wahrscheinlich so 10-15, können aber auch mal 60 sein). Die Daten werden danach vom Skript bearbeitet uns als JSON (soweit ich nachvollziehen kann) übergeben.

    Macht es einen Unterschied ob ich sagen wir mal 60 einzelne Queries habe, aus dem ich ein Array für die Übermittlung bastel oder ist es effizienter das ganze in so wenig Abfragen wie möglich zu machen? Natürlich wären dann die einzelnen SQL Queries weitaus komplexer und nicht mehr auf den ersten Blick verständlich. Sind (sagen wir mal) 60 Abfragen pro User überhaupt viel oder steckt das so ne DB locker weg?
    Als Beispiel vielleicht fürs bessere Verständnis. Ich brauche die Daten A, B und C um sie als Array an die App zu übertragen. Ist es besser ein query zu machen, bei dem Daten A, eins für B uns eins für C zu machen oder ist es besser ein zwar deutlich komplexeres query zu machen bei dem aber dann A, B und C direkt rauskommt.

    Sorry für die blöde Frage.

    Viele Grüße
    Dsdxb

  • #2
    kennst du die probleme der stillen post ?


    aber mal abgesehen davon, du beauftragst jemanden und erhählst bestenfalls eine lösung nach den von dir genannten specificationen.
    für die lösung trägt die entwicklung die verantwortung nicht wir.
    ich finde es immer super anstrengend, wenn jemand von jemand anderen etwas gehört hat, und ich mich damit auseinadersetzen muss.
    das möchte ich keinem entwikler antun.

    Kommentar


    • #3
      Die Frage lässt sich ohne Hintergrundwissen zur Struktur der DB nicht so einfach beantworten.
      Aber mal folgende Rechnung aufgemacht:
      Angenommen jede Anfrage braucht nur für die Verbindung und Datenlieferung je 2 ms(Millisekunden) also 4 ms pro Query, dann mal 60 sind 240 ms und das ohne das die DB arbeitet. Das sind dann schon eine viertel Sekunde. Bei vielen gleichzeitigen Benutzern kann dass schon spürbar langsam werden. Muss man aber austesten.

      Das ist alles nur graue Theorie und sagt nichts aus, ausser das sich die Anfragen zeitlich bemerkbar machen und das sollte man im Hinterkopf haben.

      Kommentar


      • #4
        Ich verstehe was du meinst. Wäre in meinem Fall nicht relevant, da ich die Datenbankabfragen teilweise den Entwicklern selbst zur Verfügung stelle. (ich sagte ja bereits es gibt ein paar Schwierigkeiten, aber wir müssen jetzt leider damit leben) Ich wollte jetzt nur wissen (da ich Anfänger bin kann ich sowas leider nicht abschätzen) ob ich die Abfragen, die ich Ihnen zugeschickt habe nochmal reduziere und damit komplexer mache oder ob es in Ordnung ist, wenn ich zwar mehrere Abfragen habe, diese aber leichter zu verstehen sind.


        Ah ok danke für die Information. Also ist es nicht komplett irrelevant, das ist gut zu wissen. Da muss ich mich dann wahrscheinlich nochmal tiefer einarbeiten und schauen wo ich die queries verbinden kann (wenn es überhaupt geht)

        Kommentar


        • #5
          Zitat von Dsdxb Beitrag anzeigen
          HMacht es einen Unterschied ob ich sagen wir mal 60 einzelne Queries habe, aus dem ich ein Array für die Übermittlung bastel oder ist es effizienter das ganze in so wenig Abfragen wie möglich zu machen? Natürlich wären dann die einzelnen SQL Queries weitaus komplexer und nicht mehr auf den ersten Blick verständlich. Sind (sagen wir mal) 60 Abfragen pro User überhaupt viel oder steckt das so ne DB locker weg?
          Als Beispiel vielleicht fürs bessere Verständnis. Ich brauche die Daten A, B und C um sie als Array an die App zu übertragen. Ist es besser ein query zu machen, bei dem Daten A, eins für B uns eins für C zu machen oder ist es besser ein zwar deutlich komplexeres query zu machen bei dem aber dann A, B und C direkt rauskommt.
          Wenn man es ausprobiert, weiß man es. Ansonsten kann man nur raten oder in dem Fall mit 0 Information einfach nur würfeln.

          Kommentar


          • #6
            Geschwindigkeit ist das Ziel bei Datenbanken, daher lieber komplexere, dafür aber schnellere Ergebnisse. Niemand wartet gern lange auf den Bus.

            Kommentar


            • #7
              Wie kann ich sowas ausprobieren mit meiner Datenbank? Gibt es ein Programm mit dem ich die Zeit messen kann die diverese Abfragen benötigen oder ist es einfacher einfach testweise ein php Script laufen zu lassen mit x Abfragen und die Zeit dort stoppen zu lassen?

              Kommentar


              • #8
                Zitat von Dsdxb Beitrag anzeigen
                Wie kann ich sowas ausprobieren mit meiner Datenbank? Gibt es ein Programm mit dem ich die Zeit messen kann die diverese Abfragen benötigen oder ist es einfacher einfach testweise ein php Script laufen zu lassen mit x Abfragen und die Zeit dort stoppen zu lassen?
                Das ist mit jedem beliebigen SQL-Client möglich. Und die Frage hat auch nicht wirklich was mit PHP zu tun.

                MOD: Vershoben von PHP Einsteiger

                Kommentar


                • #9
                  Ich schlage folgende Lektüre zu dem Thema noch vor
                  https://use-the-index-luke.com/de

                  Da steht sehr viel zu perfomance von Datenbanken.

                  Kommentar


                  • #10
                    (..)ob ich die Abfragen, die ich Ihnen zugeschickt habe nochmal reduziere und damit komplexer mache oder ob es in Ordnung ist, wenn ich zwar mehrere Abfragen habe, diese aber leichter zu verstehen sind.
                    ob eine abfrage zu verstehen ist, sollte da eingelich weniger eine rolle spielen.
                    man will einen set mit informationen und holht diesen so aus der db.


                    Gibt es ein Programm mit dem ich die Zeit messen kann die diverese Abfragen benötigen oder ist es einfacher einfach testweise ein php Script laufen zu lassen mit x Abfragen und die Zeit dort stoppen zu lassen?
                    mit time mist man die zeit welche ein programm unter *nix brauht,
                    mit explain lässt man sich sagen was die DB so treibt beim select.

                    mit :
                    google.com/search?q=saql+querie+time+messuring

                    sucht man danach bei google.

                    Kommentar


                    • #11
                      Zitat von Dsdxb Beitrag anzeigen
                      Wie kann ich sowas ausprobieren mit meiner Datenbank? Gibt es ein Programm mit dem ich die Zeit messen kann die diverese Abfragen benötigen
                      pgbench
                      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                      Kommentar


                      • #12
                        Ok ich ueberlege gerade wie ich ich es am besten machen kann um die Abfragen effizienter zu gestalten. Und bevor ich weiterueberlege vielleicht hier ein Tipp in welche Richtung ich mich bewegen sollte bzw ob es ueberhaupt Moeglich ist.
                        Ich habe eine Abfrage (Abfrage 1), die folgendermassen aussieht
                        PHP-Code:
                        SELECT itemscount(items) as amount FROM `table1WHERE customer XXX GROUP BY items 
                        Diese liefert mir die Anzahl von Items pro Customer. Soweit easy. Jetzt benoetigte ich aber die Einkaufswerte der jeweiligen Items, die in einer extra Datenbank gespeichert sind (die sind leider rechnerisch nicht rauszufinden, sondenr muessen abgefragt werden). So kostet es zum Beispiel 0,99 Cent fuer einen Bleistift, 0,65 Cent pro Stift, wenn man 2 kauft ab dem 3. kostet es 0,50 Cent pro Stift.

                        Dafuer lasse ich fuer jedes Item, welches von Abfrage A ausgegeben wird eine erneute Abfrage laufen (Abfrage B)
                        PHP-Code:
                        SELECT MAX(priceFROM price_list WHERE item_id $item_id AND amount <= $amount 
                        Dies funktioniert auch wunderbar. Gibt es eine Moglichkeit diese beiden Abfragen direkt zu verknuepfen? So dass ich das alles idealerweise in einer Abfrage hinkriege? Ein Stichwort wuerde mir reichen, damit ich weisss in welche Richtung ich weiter schauen muss. Ich hatte zuerst an ein LEFT JOIN gedacht, weiss aber nicht wie ich quasi die variable $amount da verknuepfen kann.

                        Kommentar


                        • #13
                          Das geht aber schon tief ins Geschehen, ich dachte dafür haste Programmierer, lass die das machen.

                          Kommentar


                          • #14
                            Das mag jetzt für Dich vielleicht ein vollständig neues Konzept sein, aber man kann Tabellen via JOIN verknüpfen. Und SQL-in Schleifen sollte man vollständig meiden.
                            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                            Kommentar


                            • #15
                              Ja, daran hab ich gedacht, aber ich krieg die Kombination aus count und der $amount varible nicht hin. Durch das JOIN verdoppelt der (oder verdreifacht oder was auch immer) die Datenbank und dann stimmt zum Beispiel das Count nicht mehr. Und selbst wenn ich das hinkriege weiss ich nicht wie ich das mit der varibale hinkriege. Und ja du hast Recht; Das alles ist ein neues Konzept fuer mich deswegen frag ich ja

                              Kommentar

                              Lädt...
                              X