array länge berechnen, bei 32 RAM?

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

  • array länge berechnen, bei 32 RAM?

    ich wüßte gerne wie lang mein array sein darf, bei 32 MB RAM alleine fürs Array? Wobei ich schon 32 MB für andere Dinge mit eingerechnet habe (also ich habe insgesamt 64 MB RAM für meinen Webspace laut phpinfo zur Verfügung).

    Denn ich möchte alle Mitglieder (Mitglieder ID) die mich in meiner Liste habe in ein array laden.

    in ein 2. Array kommt der jeweilige Zeitstempel
    in ein 3. Array wieder eine ID

    also habe ich am Ende 3 Arrays die gleich lang sind.

    Also müßte ich dann den Speicher von 32 MB durch 3 teilen oder?

    Das wären dann ca. 10 MB RAM für 1 Array.

    soweit so gut und jetzt müüßte ich noch berechnen, wieviel Bytes so ein Eintrag hat.

    Sind das 10 Bytes (Stempel -> 1023904606)?

    Dann wären das 1048576 Einträge pro Array bze. das Array hätte eine Länge von 1048576 Einträgen?

    Stimmt meine Berechnung?

    sind 32 MB RAM von 64 MB RAM nur für die 3 Arrays zuviel für meine Theorie oder könnten es auch mehr sein bzw. braucht das System für den Rest gar net so viel Speicher?

    P.S Homepage es ist eine Community.

  • #2
    Warum willst du ALLE Mitglieder einlesen?
    Wir werden alle sterben

    Kommentar


    • #3
      na ne es geht eher darum das jeder nutzer eine merkliste hat. ich mein es ist unwahrscheinlich das jemand 10.000 nutzer speichert in der praxis. aber ich wollt es nur für den theoretischen teil, meiner plaung mal wissen.

      man weiß ja nie ob evtl. der fall doch eintrifft und dann muß ich mein script umschreiben. darum wollt ich in weißer vorraussicht bzw. für den unwahrscheinlichen fall, trotzdem das gleich so alles organisieren, das es doch klappt.

      wie erwähnt wird es in der praxis wohl nicht passieren, aber sag niemals nie, oder?

      Kommentar


      • #4
        Nagut, dann eben anders:
        Und, was willst du mit der gesamten Merkliste im Speicher anstellen?
        Wir werden alle sterben

        Kommentar


        • #5
          naja ich habe 1 tabelle wo die nutzerid drin steht, von dem nutzer der bei dem einen nutzer vorgemerkt ist.

          + eine 2. spalte mit einer weiteren nutzerid von dem nutzer, der die liste besitzt.

          also:

          NID NID2 Datum(timestamp)!

          eine 2. tabelle mit Kommentaren:

          NID Kommentar Datum

          jetzt will ich von der 1. tabelle die ganzen nutzerid´s (NID) von dem nutzer dem die liste gehört (NID2) in 1 array speichern.

          in das 2. array kommt dann von jedem nutzer (NID) das aktuelleste kommentar aus der 2. tabelle rein.

          in das 3. array davon kommt der timestamp aus der 2. tabelle

          und dann sortiere ich alle 3 arrays anhand des 3 arrays und deren timestamps absteigend.

          also
          1. array nutzerID (tabelle 1)
          2. Array Kommentar (tabelle 2)
          3. Array Timestamp (tabelle 2)

          Code:
          array_multisort($Timestamp, SORT_DESC,$NID,$Kom);

          Kommentar


          • #6
            Das Zusammentragen der Daten sollte schon Datenbank-seitig möglich sein (geeignetes Datenmodell vorausgesetzt).
            Und Anzeigen wird man idR. eh nicht 10.000 Datensätze auf einmal - sondern höchstens einen Ausschnitt daraus, per Blätterfunktion o.ä.

            Dein derzeitiges Vorhaben scheint jedenfalls ein ziemlicher Holzweg zu sein.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              ja klar macht man eine blätterfunktion drauß (ich mache immer nur 10 einträge pro seite).

              das problem ist einfach, das ich die kommentare aus tab2 absteigend sortieren muß, aber:

              ich kann ja schlecht alle einträge überprüfen bzw. ID´s und mit meiner listentabelle (tab 1) vergleichen.

              dann müßt ich ja am ende (wenn ich das als übertriebenes beispiel nehme) 1 million datensätze prüfen und von jedem datensatz die ID des authors auslesen und in tabelle 1 prüfen, ob der nutzer in meiner liste vorhanden ist:

              where NID=authorID AND NID2=meineID..

              denn ich will im weitesten sinne sowas wie ein nachrichten system wie twitter oder eine pinnwand bei facebook machen.

              also brauche ich ja 2 tabellen -> 1 für als LISTE und 1 tabelle mit allen kommentaren.

              wenn ich es umgekehrt mache und nur die nutzer auslese aus meiner liste (sagen wir mal 1000 gespeicherte favoriten) und von denen mir den neusten eintrag anzeigen lasse, sind die kommentare aus der 2. tabelle aber nicht nach datum sortiert, sondern nach der reihenfolge aus tabelle 1, so wie ich die nutzer mal nacheinander mir auf meine merkliste gepeichert habe.

              und wie oben beschrieben, wenn ich zuerst die datensätze aus tab2 sortiere und auslese, muß ich dann aber in tab 1 prüfen ob die nutzerid(author) aus tab 2, in tab 1 und mit meiner ID zusammen in einem datensatz ist.

              also fange ich mit tab2 an, bin müßt ich unnätig viele datensätze prüfen und wenn ich mit tab1 anfange, habe ich aber nicht die passende absteigende reihenfolge der kommentare, denn es soll ja vorranging bzw. NUR nach dem alter der kommentare aus tab2 gepfrüft werden.

              ich hatte einen 3. gedanken:

              jedesmal wenn ein author ein kommentar schreibt, wird in tab1, wo überall seine ID drin steht, ein timestamp gesetzt.

              d.h. ich prüfe normal NID=authorid AND NID2=meine ID ORDER BY Datum DESC

              aber dann müßte ich ja auch in sehr vielen datensätzen den timestamp ändern.

              denn gehen wir einfach mal davon aus, das der nutzer weltbekannt ist und ihm 1.000.000 leute folgen würden.

              d.h. ich müßte dann 1.000.000 datensätze ändern.

              im moment fällt mir nix besseres ein.

              evtl. hat jemand von euch einen komplett anderen gedanken bzw. eine idee wie ich das nachrichtensystem (so was ähnliches) umsetzen kann?



              hmm so ich hät evtl. noch ne andere idee. ich mache eine tab3 in der ich 1 spalte habe, inder der aktuellste timestamp ist und 1 spalte für die nutzerid.

              und dann prüfe ich immer , wenn ich meine liste auslese (tab2) (per while schleife), in der schleife die tab3 where nutzerid=authorid und lese den timestamp in ein 2. array ein.

              also array 1 nutzerid (aus tab2)
              und array 2 timestamp

              dann sortiere ich die arrays nach timestamp (somit ändert sich im selben verhältnis die annordnung der nutzerid) und schon habe ich die passende reihenfolge und dann lasse ich in einer if schleife i=0 bis 10 array1[i] aus meiner kommmentar tabelle (tab2) den neusten datensatz des authors auslesen.
              Zuletzt geändert von Gamer20; 03.04.2011, 21:41.

              Kommentar


              • #8
                Du suchst:
                A Visual Explanation of SQL Joins
                SQL und relationale Algebra
                Die 5 Normal Formen
                Wir werden alle sterben

                Kommentar


                • #9
                  ok danke für den tip, ich denke mal ich müßte innerjoin nehmen oder? testen kann ich das jetzt nicht, da ich keine zeit mehr habe, muß erstmal arbeiten.

                  Kommentar


                  • #10
                    welchen Join du nimmst ... kommt halt auf die Art der Beziehung zwischen den Tabellen an ..

                    1:1 -> Innerjoin / Equijoin (oder halt kein expliziter Join)
                    1:n -> Left Join oder auch Innerjoin
                    [font=Verdana]
                    Wer LESEN kann, ist klar im Vorteil!
                    [/font]

                    Kommentar


                    • #11
                      1: 1 beudetet, selbe anzahl an spalten und selbe datensatznummer (z.b. 13. zeile) bei beiden tabellen?

                      na ich brauche dann eher left join. da 1. die anzahl der spalten unterschiedlich ist und die stelle des datensatzes (z.b. 15. zeile bei den kommentaren und 2. zeile bei der tab2 für die merkliste).

                      ok werd mich heut abend mal dran setzen, erstmal ausruhen von der arbeit.

                      Kommentar


                      • #12
                        1:1 Relationen werden üblicher Weise in eine Tabelle gestopft.
                        Tut selten Not das zu zerreißen.
                        Die 5 Normal Formen
                        Wir werden alle sterben

                        Kommentar


                        • #13
                          ich glaube jetzt habe ich es:

                          Code:
                          $ausgabe = mysql_query("SELECT forumbeitrag.ID,forumbeitrag.Kommentar FROM favoritenliste INNER JOIN
                          forumbeitrag ON (favoritenliste.NID2 = forumbeitrag.NID2 AND favoritenliste.NID = '$meineID') ORDER BY forumbeitrag.Datum DESC");
                          ich danke euch und das ohne unfreundliche Kommentare (das hat man leider hier öfters mal).

                          aber ihr wart sehr geduldig mit mir und es klappt endlich, DAAAANNNKKKEEEE!!!

                          Kommentar

                          Lädt...
                          X