Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361

    Ottimizzare una tabella di "amici"

    Salve, ho una domanda che mi porto dietro da parecchio tempo alla quale devo dare una risposta.

    Il progetto a cui sto lavorando ha la classica parte "social" dedicata agli amici, ovvero "chi" è amico di "chi".. e vorrei ottimizzare proprio questo punto o almeno capire qual'è la strada migliore da seguire in termini di "chiarezza", "pesantezza" e "velocità di recupero delle informazioni"

    la prima strada è quella più "sempliciotta" dove nella tabella utenti (ID, nome, cognome ecc.) metto un altro campo "amici" al cui interno inserisco una stringa contenente i vari ID degli amici separati da qualche simbolo.. in questo caso non ho bisogno di fare altre tabelle, ma se uno si ritrova con 300-400 amici magari diventa confusionaria e lenta la situazione

    la seconda ipotesi prevede una tabella "di mezzo" costituita principalmente da 2 campi che conterranno rispettivamente l'ID dell'utente e l'ID dell'amico. Di conseguenza, se un utente avrà 200 amici ci saranno 200 righe in quella tabella con il suo ID associato all'ID di ogni amico.

    La seconda strada mi sembra ovviamente la migliore in termini di chiarezza, ma non so se è effettivamente la più veloce o la migliore da seguire. Suggerimenti?
    Ti rivedrò in un'altra vita…quando saremo tutti e due gatti...

  2. #2
    Io userei la tabella di mezzo.

  3. #3
    personalmente ritengo che la prima soluzione sia la migliore...se ad esempio hai un campo di tipo TEXT (non VARCHAR quindi) puoi mettere tanti ID separati da un simbolo tipo *, ad esempio 1*2*3*4*5 ; poi basta un comando $array = explode('*', $record['id_amici']; per avere un array con cui lavorare iN MEMORIA e quindi più veloce; nel secondo caso invece saresti nel caso di uan relazione mOLTI A MOLTI (un amico può avere più amici e viceversa) per cui appunto come giustamente fai rilevare occorre una tabella temporanea con unico ID utente ed un unico ID amico per avere una relazione UNO AD UNO. Ma così sicuramente si rallentano un pò le cose...cmq, dovresti fare una prova con tutti e due (ad esempio che leggano 100 amici) e controllare gli orari di inizio e fine script!

  4. #4
    Originariamente inviato da Emulman
    personalmente ritengo che la prima soluzione sia la migliore...se ad esempio hai un campo di tipo TEXT (non VARCHAR quindi) puoi mettere tanti ID separati da un simbolo tipo *, ad esempio 1*2*3*4*5 ; poi basta un comando $array = explode('*', $record['id_amici']; per avere un array con cui lavorare iN MEMORIA e quindi più veloce; nel secondo caso invece saresti nel caso di uan relazione mOLTI A MOLTI (un amico può avere più amici e viceversa) per cui appunto come giustamente fai rilevare occorre una tabella temporanea con unico ID utente ed un unico ID amico per avere una relazione UNO AD UNO. Ma così sicuramente si rallentano un pò le cose...cmq, dovresti fare una prova con tutti e due (ad esempio che leggano 100 amici) e controllare gli orari di inizio e fine script!
    Secondo me potrebbero esserci inconsistenze generate dal controllo duplicità dato che devi leggere un campo varchar.

  5. #5
    anche con la tabella temporanea sei costretto a fare lo stesso controllo e quindi con maggior perdita di tempo direi...

  6. #6
    Originariamente inviato da Emulman
    anche con la tabella temporanea sei costretto a fare lo stesso controllo e quindi con maggior perdita di tempo direi...
    Sai percaso come Facebook gestisce gli "amici"? mi pare che possono arrivare fino a 5.000.

  7. #7
    bella forza! li hanno web farms con migliaia di server sparsi in tutto il mondo, non hanno certo problemi di overload...se ne hai invece uno solo epr gestire 1000 utenti allora si che i problemi si fanno sentire!!!!

  8. #8
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,647
    Per dati del genere orientati su nosql, solo per l'elenco degli amici intendo.

  9. #9

    Re: Ottimizzare una tabella di "amici"

    Originariamente inviato da LuckySevenRoX
    La seconda strada mi sembra ovviamente la migliore in termini di chiarezza, ma non so se è effettivamente la più veloce o la migliore da seguire.
    Le tabelle di relazione N a N servono proprio per situazioni del genere
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  10. #10
    Allora tu hai una relazione ricorsiva molti:molti e quindi un'altra tabella che è la tabella di relazione dove ci saranno (principalmente) gli ID dell'utente che richiede l'amicizia e dell'utente che la accetta.
    Sono disponibile per realizzare lavori su commissione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.