Los lenguajes orientados al objeto como, por ejemplo, Java, las bases de datos relacionales soportan las relaciones o asociaciones. Las relaciones reducen la cantidad de almacenamiento a través del uso de las referencias de objeto o claves foráneas.
Cuando se utilizan relaciones en una cuadrícula de datos, los datos se deben organizar en un árbol restringido. Debe existir un tipo raíz en el árbol y todos los hijos deben estar asociados sólo a una raíz. Por ejemplo: El Departamento puede tener muchos Empleados y un Empleado puede tener muchos Proyectos. Pero un Proyecto no puede tener muchos Empleados que pertenezcan a distintos departamentos. Una vez definida una raíz, todos los accesos a dicho objeto raíz y a sus descendientes se gestionan a través de la raíz. WebSphere eXtreme Scale utiliza el código hash de la clave del objeto raíz para elegir una partición. Por ejemplo:
partition = (hashCode MOD numPartitions).
Cuando todos los datos de una relación se enlazan a una única instancia de objeto, todo el árbol se puede colocar en una única partición y se puede acceder a él de forma muy eficaz mediante una transacción. Si los datos abarcan varias relaciones, se deben implicar varias particiones que conllevan llamadas remotas adicionales, que pueden llevar a cuellos de botella de rendimiento.
Algunas relaciones incluyen datos de búsqueda o de referencia como, por ejemplo: CountryName. Para datos de búsqueda o referencia, los datos deben existir en cada partición. Cualquier clave raíz puede acceder a los datos y se devuelve el mismo resultado. Los datos de referencia como los siguientes solo deben utilizarse en casos en los que los datos sean bastante estáticos. La actualización de estos datos puede resultar costosa ya que los datos deben actualizarse en cada partición. La API DataGrid es una técnica común para mantener los datos actualizados.
La normalización de los datos que utilizan relaciones puede ayudar a reducir la cantidad de memoria utilizada por la cuadrícula de datos porque la duplicación de datos disminuye. Sin embargo, en general, cuantos más datos relacionales se añaden, menos se ampliarán. Si los datos se agrupan de forma conjunta, será más caro conservar las relaciones y mantener los tamaños gestionables. Puesto que los datos de particiones de cuadrícula se basan en la clave de la raíz del árbol, el tamaño del árbol no se toma en consideración. Por lo tanto, si tiene muchas relaciones para una instancia de árbol, la cuadrícula de datos se desequilibra, lo que provoca que una partición tenga más datos que las demás.
Cuando se deshace la normalización de los datos o se "aplanan", los datos que normalmente se compartirían entre dos objetos, en lugar de esto, se duplican y cada una de las tablas se puede particionar de forma independiente, lo que proporciona una cuadrícula de datos mucho más equilibrada. Aunque así se aumenta la cantidad de memoria utilizada, permite a la aplicación ampliarse ya que se puede acceder a una única fila de datos que contiene todos los datos necesarios. Esto es ideal para las cuadrículas que se leen con frecuencia puesto que el mantenimiento de los datos pasa a ser más caro.
Si desea más información, consulte Clasificación de sistemas XTP y ampliación.
La API ObjectMap es la API de acceso de datos más rápida, más flexible y granular y proporciona un enfoque transaccional basado en sesiones para el acceso a datos de la cuadrícula de correlaciones. La API ObjectMap permite a los clientes utilizar las operaciones CRUD (crear, leer, actualizar y suprimir) comunes para gestionar los pares de clave-valor en la cuadrícula de datos distribuida.
Cuando se utiliza la API ObjectMap, las relaciones de objetos se deben expresar mediante la incorporación del a clave foránea para todas las relaciones en el objeto padre.
A continuación se muestra un ejemplo.
public class Department {
Collection<String> employeeIds;
}
La API EntityManager simplifica la gestión de relaciones extrayendo los datos persistentes de los objetos, incluidas las claves foráneas. Cuando el objeto se recupera más adelante de la cuadrícula de datos, el gráfico de relaciones se vuelve a crear, como en el siguiente ejemplo.
@Entity
public class Department {
Collection<String> employees;
}
La API EntityManager es muy similar a otras tecnologías de persistencia de objeto Java como, por ejemplo, JPA e Hibernate, porque sincroniza un gráfico de instancias de objeto Java gestionadas con el almacén persistente. En este caso, el almacén persistente está en una cuadrícula de datos eXtreme Scale, donde cada entidad se representa como una correlación y la correlación contiene los datos de entidad, en lugar de las instancias de objeto.