Lorsque nous avons une grande quantité de données, nous ne pouvons pas conserver toutes nos données sur une seule machine. Cela signifie que pour chaque personne, nous devons stocker un identifiant de machine. Nous devons prendre en charge les aspects suivants -
- Pour chaque ID d'ami: machine_id = lookupMachineForUserID (id);
- Passez à machine_id
- friend = lookupFriend (machine_id);
Il peut y avoir beaucoup d'optimisations effectuées ici. L'un d'entre eux consiste à réduire le nombre de sauts d'une machine à l'autre, car cela coûte cher. Nous pouvons le faire en regroupant des personnes appartenant à un même pays/une même ville. Il y a de grandes chances de trouver des amis dans la même ville. De même, il peut y avoir d'autres façons d'optimiser.
Je vais essayer de donner une implémentation très basique de la structure de nos données. Ofcourse en réalité, nous devons tenir compte de beaucoup de facteurs comme si sur des machines tombe en panne, les données de mise en cache, etc.
public class Server
{
ArrayList<Machine> machines = new ArrayList<Machine>();
}
public class Machine
{
public ArrayList<Person> persons = new ArrayList<Person>();
public int machineID;
}
public class Person
{
private ArrayList<Integer> friends;
private int ID;
private int machineID;
private String info;
private Server server = new Server();
}
Je vais essayer de poster la solution pour tracer le chemin entre amis plus tard.
Donner un champ Personne machineID n'est pas vraiment bien. Cela suppose qu'une Personne ne peut pas être localisée sur plusieurs machines et qu'elle mélange aussi le code de "distribution" avec le code "personne" – Ivan
@Ivan: Comme je l'ai dit, il peut y avoir beaucoup d'optimisations différentes pour distribuer les utilisateurs. Je viens de donner une solution possible qui pourrait être bonne pour une question d'entrevue. –
Je pense que c'est une bonne solution pour une interview. Il attaque au moins le problème dans la bonne direction. – user450090