Puede configurar el HashIndex incorporado, la clase com.ibm.websphere.objectgrid.plugins.index.HashIndex,
con un archivo XML, programáticamente, o con una anotación de entidad en una correlación de entidad.
Acerca de esta tarea
Configurar un índice compuesto equivale a configurar un índice normal con XML, excepto el valor de la propiedad attributeName. En un índice compuesto, el valor de la propiedad attributeName es una lista delimitada por comas de atributos. Por ejemplo, la clase de valor
Address tiene tres atributos: city, state y zipcode. Un índice compuesto se puede definir con el valor de la propiedad attributeName como "city,state,zipcode", lo que indica que
city, state y zipcode se incluye en el índice compuesto.
Además, tenga en cuenta que los
HashIndexes compuestos no soportan las búsquedas de rango y, por lo tanto, no pueden tener la propiedad
RangeIndex establecida en true.
Procedimiento
- Configure un índice compuesto en el archivo XML de descriptor de ObjectGrid.
Utilice el elemento backingMapPluginCollections para definir el plug-in:
<bean id="MapIndexPlugin" className="com.ibm.websphere.objectgrid.plugins.index.HashIndex">
<property name="Name" type="java.lang.String" value="Address.CityStateZip"/>
<property name="AttributeName" type="java.lang.String" value="city,state,zipcode"/>
</bean>
- Configure un índice compuesto programáticamente.
El siguiente código de ejemplo crea el mismo índice compuesto:
HashIndex mapIndex = new HashIndex();
mapIndex.setName("Address.CityStateZip");
mapIndex.setAttributeName(("city,state,zipcode"));
mapIndex.setRangeIndex(true);
BackingMap bm = objectGrid.defineMap("mymap");
bm.addMapIndexPlugin(mapIndex);
- Configure un índice compuesto con notaciones de entidad.
Si utiliza correlaciones de entidad, puede utilizar un enfoque de anotaciones para definir un índice compuesto. Puede definir una lista de CompositeIndex en la anotación CompositeIndexes en el nivel de clase de entidad.
El CompositeIndex tiene un nombre y una propiedad attributeNames.
Cada CompositeIndex está asociado con una instancia de HashIndex aplicada a la correlación de respaldo asociada con la entidad. El índice HashIndex está configurado como un índice de no intervalo.
@Entity
@CompositeIndexes({
@CompositeIndex(name=" CityStateZip ", attributeNames=" city,state,zipcode"),
@CompositeIndex(name="lastnameBirthday", attributeNames=" lastname,birthday ")
})
public class Address {
@Id int id;
String street;
String city;
String state;
String zipcode;
String lastname;
Date birthday;
}
La propiedad name de cada índice compuesto debe ser exclusiva en la entidad y la correlación de respaldo. Si no se especifica el nombre, se utilizará un nombre generado. La propiedad attributeName se utiliza para llenar el attributeName HashIndex con la lista delimitada por comas de atributos. Los nombres de atributo coinciden con los nombres de campos persistentes, cuando las entidades se configuran para utilizar el acceso a campo, o el nombre de la propiedad se haya definido para los convenios de denominación de JavaBeans para las entidades de acceso a propiedades. Por ejemplo, si el nombre de atributo es street,
el método de obtención de la propiedad se denomina getStreet.
Ejemplo: Añadir HashIndex
a BackingMap
En el ejemplo siguiente, configura el plug-in HashIndex añadiendo plug-ins de índice estático al archivo XML:
<backingMapPluginCollection id="person">
<bean id="MapIndexPlugin"
className="com.ibm.websphere.objectgrid.plugins.index.HashIndex">
<property name="Name" type="java.lang.String" value="CODE"
description="index name" />
<property name="RangeIndex" type="boolean" value="true"
description="true for MapRangeIndex" />
<property name="AttributeName" type="java.lang.String" value="employeeCode"
description="attribute name" />
</bean>
</backingMapPluginCollection>
En este ejemplo de configuración XML, se utiliza la clase HashIndex incorporada como el plug-in de índice. HashIndex da soporte a propiedades que los usuarios pueden configurar como, por ejemplo, Name, RangeIndex y AttributeName.
- La propiedad Name se configura como CODE,
una serie que identifica este plug-in de índice. El valor de la propiedad Name debe ser exclusivo en el ámbito de la correlación de respaldo. El nombre se puede utilizar para recuperar el objeto de índice por nombre de la instancia ObjectMap para la BackingMap.
- La propiedad RangeIndex se configura como true,
lo que significa que la aplicación puede difundir el objeto de índice recuperado a la interfaz MapRangeIndex. Si la propiedad RangeIndex
se configura como false, la aplicación solo puede difundir el objeto de índice recuperado a la interfaz MapIndex.
Un MapRangeIndex soporta las funciones para encontrar los datos utilizando las funciones de rango como, por ejemplo, mayor que, menor que, o ambos, mientras que un MapIndex
sólo soporta las funciones de igual. Si el índice es por consulta, la propiedad RangeIndex se debe configurar como true en índices de un solo atributo.
Para un índice de relación o un índice compuesto, la propiedad RangeIndex se debe configurar como false.
- La propiedad AttributeName se configura como employeeCode, lo que significa que el atributo employeeCode del objeto almacenado en memoria caché se utiliza para crear un índice de un solo atributo. Si una aplicación debe buscar objetos almacenados en memoria caché con varios atributos, la propiedad AttributeName se puede establecer en una lista delimitada por comas de atributos, lo que genera un índice compuesto.
En resumen, en el ejemplo anterior se define un rango de atributo único
HashIndex. Es un HashIndex de un solo atributo porque el valor de la propiedad AttributeName es employeeCode, que incluye solo un nombre de atributo. Es además un rango HashIndex.