13.6.4. Partitionnement d'indexes
Avertissement
- Un index unique est trop volumineux, donc les temps de mises à jour ralentissent l'application.
- Une recherche typique ne touchera qu'un sous-ensemble d'indexes, comme quand les données sont segmentées naturellement par client, région ou application.
hibernate.search.<indexName>.sharding_strategy.nbr_of_shards.
Exemple 13.68. Activer le partitionnement de l'index
hibernate.search.<indexName>.sharding_strategy.nbr_of_shards = 5
hibernate.search.<indexName>.sharding_strategy.nbr_of_shards = 5
IndexShardingStrategy est chargée de diviser les données en sous-indexes. La stratégie de partitionnement par défaut divise les données en fonction de la valeur de hachage de la représentation de la chaîne d'ID (générée par le FieldBridge). Cela garantit un partitionnement assez équilibré. Vous pouvez remplacer la stratégie par défaut avec une IndexShardingStrategy personnalisée. Pour utiliser votre statégie personnalisée, vous devez définir la propriété hibernate.search.<indexName>.sharding_strategy.
Exemple 13.69. Spécifier une stratégie de partitionnement personnalisée
hibernate.search.<indexName>.sharding_strategy = my.shardingstrategy.Implementation
hibernate.search.<indexName>.sharding_strategy = my.shardingstrategy.Implementation
IndexShardingStrategy permet également d'optimiser les recherches en sélectionnant dans quelle partition (shard) exécuter la requête. En activant un filtre, une stratégie de partitionnement peut sélectionner un sous-ensemble de sections permettant de répondre à une requête (IndexShardingStrategy.getIndexManagersForQuery) et ainsi accélérer l'exécution de la requête.
IndexManager indépendant, et donc peut être configuré pour utiliser un fournisseur et un serveur de sauvegarde différents. Les noms d'indexes IndexManager pour l'entité Animal dans Exemple 13.70, « Configuration de partitionnement pour l'entité Animal » sont Animal.0 à Animal.4. En d'autres termes, chaque partition porte le nom de l'index auquel il appartient, suivi de . (point) et son numéro d'index.
Exemple 13.70. Configuration de partitionnement pour l'entité Animal
Animal en 5 sous indexes. Tous les sous-indexes sont des instances du système de fichiers et du répertoire où est stocké chaque sous-index comme suit :
- pour le sous-index 0 :
/usr/lucene/indexes/Animal00(indexBase partagée mais indexName substitué) - pour le sous-index 1 :
/usr/lucene/indexes/Animal.1(indexBase partagé, indexName par défaut) - pour le sous-index 2 :
/usr/lucene/indexes/Animal.1(indexBase partagé, indexName par défaut) - pour le sous-index 3 :
/usr/lucene/indexes/Animal03(indexBase substitué, indexName substitué) - pour le sous-index 4 :
/usr/lucene/indexes/Animal.4(indexBase partagé, indexName par défaut)
IndexShardingStrategy, n'importe quel champ peut être utilisé pour déterminer la sélection de partitionnement. Considérons que pour traiter des suppressions, avec les opérations purge et purgeAll, l'implémentation soit amenée à retourner un ou plusieurs indexes sans être en mesure de lire toutes les valeurs de champ ou l'identificateur principal. Dans ce cas, l'information ne suffit pas pour choisir un seul indice, tous les indexes doivent être retournés, afin que l'opération de suppression puisse être propagée à tout index susceptible de contenir les documents devant être supprimés.