Cuando tenemos una gran cantidad de datos, no podemos mantener todos nuestros datos en una sola máquina. Eso significa que para cada persona necesitamos almacenar una identificación de la máquina. Tenemos que cuidar de los siguientes aspectos -
- por cada amigo ID: machine_id = lookupMachineForUserID (id);
- Ir a la máquina machine_id
- friend = lookupFriend (machine_id);
Aquí se pueden realizar muchas optimizaciones. Una de ellas es reducir el número de saltos de una máquina a otra, ya que es caro. Podemos hacerlo agrupando personas que pertenecen al mismo país/ciudad juntas. Hay altas posibilidades de encontrar amigos en la misma ciudad. Del mismo modo, puede haber otras formas de optimizar.
Trataré de dar una implementación muy básica de cómo se verán nuestras estructuras de datos. Por supuesto, en realidad, tenemos que considerar muchos factores, como qué pasaría si en una de las máquinas se cae, los datos de almacenamiento en caché, 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();
}
voy a tratar de publicar la solución a trazar el camino entre amigos después.
Dar persona machineID un campo no es muy agradable. Esto supone que una Persona no puede ubicarse en varias máquinas y también mezcla el código de "distribución" con el código de "persona" – Ivan
@Ivan: como dije, puede haber muchas optimizaciones diferentes para distribuir a los usuarios. Acabo de dar una posible solución que podría ser buena para una pregunta de entrevista. –
Creo que esta es una buena solución para una entrevista. Al menos ataca el problema en la dirección correcta. – user450090