0

Meine Web-App muss IMMER Verbindungen 2. Grades abfragen. Jeder Benutzer hat sagen, 200 Freunde & diese Freunde haben jeweils 200 Freunde. Ich könnte Hilfe bei der Bestimmung der richtigen Datenbank (und Tabellenstruktur) verwenden, um diese Web-App schnell & reagieren zu lassen.Auswahl der Datenbank: Häufig Abfragen von Verbindungen 2. Grades

Geschäftslogik: Benutzer ihre ersten & 2. Grades Verbindungen zu suchen, eine Liste von anderen Nutzern zu erhalten, die einen bestimmten Dienst nutzen (gespeichert in einer Spalte als unsigned int). Das ist die einzige Funktionalität dieser App.

Tabellenstruktur:

  • User Table: User_ID (pk), Facebook_ID (sk), Name, Specific-Service, Location
  • Beziehung Tabelle: noch unentschlossen.

Frage: Ich lese & viele Stellen im Internet nach "Social-Networking-Datenbank-Design" gesucht. Diese Anwendungen fühlen sich jedoch sehr unterschiedlich an. Ich werde viele Benutzer haben (+10 Mil), aber eine kleine Datenbank & führen nur eine Abfrage wie in Business-Logik beschrieben.

Zusätzliche Informationen: Benutzer können sich nur mit ihrem Facebook-Konto anmelden (& anschließend anmelden). Ihre Freunde werden eingeladen (über Facebook) sich ebenfalls anzumelden. Die Beziehung Tabelle wird bevölkert werden, wenn Freunde zu registrieren (nur aktiv/nicht-blockiert/nicht angemeldete Freunde). So kann ich die Spalte "Freundschaftsstatus" von Relationship-Tabelle loswerden.

Antwort

0

Sie benötigen eine Tabelle mit zwei IDs; es wird einen "Freund" definieren. Ist diese Beziehung symmetrisch? Das heißt, wenn A ein Freund von B ist, ist B ein Freund von A? Nun, ich nehme an, dass es zwei Reihen gibt, wenn beide auftreten.

Dann

CREATE TABLE Friends (
    user1 ..., 
    user2 ..., 
    PRIMARY KEY(user1, user2), 
    INDEX(  user2, user1) 
) ENGINE=InnoDB; 

SELECT a.name, c.name 
    FROM Users AS a 
    JOIN Friends AS ab ON ab.user1 = a.user_id 
    JOIN Users AS b ON b.user_id = ab.user2 
    JOIN Friends AS bc ON bc.user1 = b.user_id 
    JOIN Users AS c ON c.user_id = bc.user2 
    WHERE a.user_id = ? 
+0

Ja das Design ist symmetrisch und es gibt keine anderen Optionen (wie Verfolger, Gesperrte Kontakte usw.). Aber meine eigentliche Frage ist, wird dieses Design effizient sein, wenn ich die Abfrage durchführen, um Freunde zweiten Grades zu finden? –

+0

Wenn alles zwischengespeichert wird, sollten tausend Freunde zweiten Grades weniger als eine Sekunde dauern. Selbst wenn nicht vollständig zwischengespeichert, könnte es nur eine Sekunde dauern. –

+0

Könnten Sie bitte auch aus Ihrer Erfahrung kommentieren, welche Datenbank verwendet werden soll? Ich meine, sollte ich für Graph-Datenbank oder RDBMS gehen? –

Verwandte Themen