news bei twitter usw.

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

  • news bei twitter usw.

    hi,

    mich würde interessieren wie ich so etwas am besten realisiere:
    z.b. werden ja bei twitter die tweets meiner kontackte nach der aktualität angezeigt.
    wie macht twitter das?
    bekommt jeder der mich z.b. followed meine neuen tweets in seine newstabelle geschrieben?eher ja nicht, da dies ja ein deutliche vergrößerung des eig. notwedigen speicherplatztes wäre...
    oder gibt es ein script das die news meiner freunde durchsucht und sortiert ausgibt?

    gruß

  • #2
    Zitat von Jayjay Beitrag anzeigen
    z.b. werden ja bei twitter die tweets meiner kontackte nach der aktualität angezeigt. wie macht twitter das?
    Frag Twitter. Aber wahrscheinlich geht das per SQL über ORDER BY.
    Zitat von Jayjay Beitrag anzeigen
    bekommt jeder der mich z.b. followed meine neuen tweets in seine newstabelle geschrieben?
    Nö, da wird in der Datenbank nur eine Relation zu dir hergestellt.
    Zitat von Jayjay Beitrag anzeigen
    oder gibt es ein script das die news meiner freunde durchsucht und sortiert ausgibt?
    Willst du das selber machen oder suchst du ein Script, das das für dich erledigt. Denn dann verschiebe ich es in das richtige Forum.

    Peter

    PS: Vielleicht solltest du mal genau erklären, was du vorhast.
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      hi syr für das missverständniss,
      ich will so etwas in der art programmieren, ich nenn es mal einen "datenstream".
      also ich habe einen account und habe social-friends diese freunde abonnieren dann meine nachrichten und sollen diese auf ihrer seite angezeigt bekommen und zwar mit den nachrichten der anderen freunde halt in einer chronologischen Ordnung.

      für ich ist es jetzt die frage wie man so etwas macht:
      1. muss ich ein script programmieren das die z.b. 5 aktuellsten tweets meiner freunde einliest und dann vergleicht und dann die wegen mir insgesammt 5 aktuellsten anzeigt?

      oder
      2. wäre es z.b. besser eine mysql tabelle mit den nachrichten und einer spalte wo dann alle id's von den freunden stehen, die dies so zusagen lesen können,sodass ich eig. später nur noch die id von mir suchen muss und alles zeitlich richtig ausgeben?

      gruß

      Kommentar


      • #4
        Zitat von Jayjay Beitrag anzeigen
        2. wäre es z.b. besser eine mysql tabelle mit den nachrichten und einer spalte wo dann alle id's von den freunden stehen, die dies so zusagen lesen können,sodass ich eig. später nur noch die id von mir suchen muss und alles zeitlich richtig ausgeben?
        Das ist imho der richtige Weg. Ist nur eine Frage der Normalisierung. Ich lass das hier erst mal stehen, obwohl es wohl primär um eine Datenbankgeschichte geht. Mal abwarten, was die anderen dazu sagen.

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          obwohl das wäre ja auch schwachsinn wenn ich sagen wir mal 200 freunde hätte und allen deren id in das lesen feld geschrieben würde pro news von mir würden sich auch haufenweise daten ansammeln
          gibt es vllt eine möglichkeit bei
          PHP-Code:
          SELECT FROM links WHERE id121 AND ... 
          usw. das id = mit hilfe einer forschleife so oft zu wiederholen wie ich freunde habe?
          also so in der art
          PHP-Code:
          for($a 1$a $anzahlfreunde$a++) 
          dann die id jedes freundes auslesen und anhängen
          PHP-Code:
          id=73450 And id=783486 id=... 
          usw.
          und dies dann nur noch hinter das where bei der datenbankauslesung einbauen

          ich hoffe dies ist einigermaßen verständlich,
          wäre dies eine realisierbare gute möglichkeit?

          Kommentar


          • #6
            nö .. das macht wenig Sinn, - wegen Normalisierung steht im ID Feld sowieso nur eine Zahl drin . Es macht auch keinen Sinn, dort mehrere Ids zu sammeln, darunter leidet die Übersicht ...

            Da es sich offensichtlich um eine M:N Beziehung handelt (M Nachrichten von bzw an N Freunde) machst du am besten eine 3te Tabelle die nur Beziehungen enthält..

            Also ID_Nachricht ID FReund als Spalten hat ..

            dann hast du jeweils 1 Zeile pro "Beziehungspaar) .. und wenn du wissen willst, welche deiner Nachrichten von Wem gelesen wird, dann klapperst du einfach diese Beziehungstabelle nach deiner Nachrichten ID ab und holst dir über die gefundenen Freund IDs dann deren EInträge aus der User Tabelle (oder Freunde)...

            wenn du dann obendrein der Beziehungstabelle ein Datumsfeld spendierst, kannst du dieses Nutzen um jeweils die neusten Leser herauszufinden
            Zuletzt geändert von eagle275; 07.08.2010, 14:07.
            [font=Verdana]
            Wer LESEN kann, ist klar im Vorteil!
            [/font]

            Kommentar


            • #7
              aber wenn ich für jede beziehung pro nachricht einespalte machen verbaut das ganze doch auch extrem viel speicherplatz

              ja syr ich meinte eig. WHERE id= 121 OR id= usw.

              dann müsste ich nur alle ids meiner freunde in die syql abfrage einbauen und hätte keinen großen speicherverlust da die anchricht nur einmal geschrieben worden ist.
              wäre das nicht besser?
              oder lässt es sich nicht realisirten das ich den erstellten String mit allen ids einfach in die sql abfrage einbinde?

              Kommentar


              • #8
                du machst nicht für jeden Leser eine spalte - dann ufert dein Tabellendesign aus .. sondern einfach eine kurze Eintragung in der erwähnten Beziehungstabelle

                ID der Nachricht , ID des Lesers, Datum (bei der 3spaltigen Variante) ..

                Wegen des Speichers - die Nachricht steht in der Tabelle für Nachrichten idealerweise 1 mal drin - also verbraucht sie auch nur 1 mal Speicher
                und für die Beziehungstabelle .... die beiden Ids sind sowieso kurz (maximal 32 bit .. ) und das Datum wird auch als komprimierte Zahl gespeichert , dürfte 64 bit lang sein .. also 16 Byte Pro Zeile, dafür bleibt dein Tabellendesign in der 3ten Normalform - und die ist eigentlich das Mindeste, wenn Relationale Tabellen noch Sinn machen sollen

                außerdem ...

                Wenn du jedem Leser eine weitere Spalte spendieren willst - woher weißt du denn welches ID-Feld du überhaupt vergleichen musst?

                Und alle Leser Ids in eine Spalte Schreiben .. welches Format soll die Denn haben - damit kannst du eigentlich deine Abfrage vergessen, du müsstest die Nachricht mit einer Abfrage einlesen und dann mit deiner Programmiersprache dieses Feld irgenwie auswerten, was aber alles andere als schnell ist ...idR ist die Datenbank schneller, dir die Datensätze anhand der von mir vorgeschlagenen 3ten Bezieungstabelle zu finden, weil dort die Informationen so schön eindeutig sind

                Ich empfehle dir dringend wenigstens das GrundlagenKapitel zum Thema Datenbank-Design aus irgendeinem Buch, das sich mit SQL beschäftigt .. und wenn es eines ist, das PHP mit (My)SQL verheiraten soll ^^ - Dort erfährst du die Grundlagen von Tabellen bzw Datenbank Design und auch von den sogenannten Normalformen ...Ziel deiner Anstrengungen sollte immer mindestens die 3te Normalform sein - und besonders Augenmerk musst du auf die Beziehungen zwischen den Tabellen richten


                um es Kurz zu machen es gibt derer 3 ...

                1:1 - das ist die einfachste .. 1 Datensatz in der einen Tabelle hat genau 1 Partner in einer anderen Tabelle ...
                (1 Kunde -> seine Adresse , 1 Kunde -> seine Bankinformation)
                1:n - 1 Datensatz bezieht sich auf mehrere in einer anderen Tabelle
                (1 shop -> mehrere Waren)

                m:n - m Datensätze mit n Datensätzen in der anderen Tabelle
                (so wie bei dir .. n Nachrichten an m Freunde)
                während die ersten 2 aus Datenbanksicht trivial sind .. gilt es den 3ten Fall zu meiden wie der Teufel das Weihwasser, weil diese Beziehung keine eindeutigen Informationen liefert, wenn es nur diese 2 Tabellen gibt .. daher führt man eine Dritte Tabelle ein, die m:n durch 1:m und 1:n Beziehung ersetzt ..

                soviel zur Theorie
                Zuletzt geändert von eagle275; 08.08.2010, 23:43.
                [font=Verdana]
                Wer LESEN kann, ist klar im Vorteil!
                [/font]

                Kommentar


                • #9
                  ok das verstehe ich , ich dachte nur das große dienste wie twitter evtl keine solleche tabelle haben sondern vllt ein script das alles durchforstet und so zu sagen meine nachrichten der freunde generiert, dann bräuchte ich nur die allgemeinde beziehung von der id meines freundes und der id von mir und dies würde für alle nachrichten usw. gehen.
                  aber ok deine lösung verscheint mir natürlich deutlich einfacher , aber wenn wir mal z.b. von einem promi ausgehen würde der täglich 5 tweets schreiben würde und 2 millionen follower hat würden das pro tag ca. 150 mb anfallen..

                  Kommentar


                  • #10
                    ich weiß ehrlich gesagt auch nicht, wie das Twitter, Facebook und ähnliche Konsorten tatsächlich machen - und die werden nen Teufel tun und es erzählen - aber deren Datenbank läuft mit Sicherheit auf (mindestens) einer Serverfarm, von deren Speicherplatz der normale Computernutzer selbst als Nerd träumt ...
                    Andererseits kann es durchaus sein, dass die das allein anhand der Zuordnung deiner Freunde machen, weil so, wie ich das verstanden habe ja sowieso JEDE deiner Nachrichten bei deinen Freunden gelistet wird ... Um also auf den Promi zu kommen, 2 Mio Nutzer haben den in ihrer Freundesliste und bekommen daher jede Nachricht / Tweet oder wie das auch immer heißen mag -

                    In dem Fall braucht man natürlich keine weitere Tabelle anhand derer diese Beziehung quasi nochmal kopiert wird .. Aber irgendeine Form von Zuordnung zwischen User A und seinen Freunden muss existieren .. sonst könnte ja die Nachricht nicht verteilt werden
                    [font=Verdana]
                    Wer LESEN kann, ist klar im Vorteil!
                    [/font]

                    Kommentar


                    • #11
                      Man kommt intuitiv zu folgendem DB-Design:
                      Code:
                      user(id, name, ...)
                      message(user_id, text, timestamp)
                      follower(user_id, follower_id)
                      
                      # alle Messages aller User denen $currentUserID folgt
                      SELECT * 
                      FROM message m 
                      JOIN follower f ON m.user_id = f.user_id
                      WHERE f.follower_id = $currentUserID
                      ORDER BY m.timestamp DESC
                      Wenn dir das zu langsam ist, kannst du mit zusätzlichen Tabellen gegensteuern, aber dann brauchst du natürlich mehr Speicherplatz.

                      Übrigens gibt es Open Source Twitter-Clones. Schau doch mal nach wie die ihre Daten speichern!

                      Kommentar


                      • #12
                        top danke, ich wusste noch nichts von der join funktion aber diese erscheint mir logisch

                        Kommentar


                        • #13
                          Wer JOIN nicht kennt, kann auch Normalisierung nicht kennen. Das gehört allerdings zu den Grundlagen. Du solltest dich da unbedingt belesen (Wikipedia als Einstieg)!

                          Kommentar

                          Lädt...
                          X