J'avais présenté un simple index et une Approche avec Main + delta. Voici maintenant 3 techniques un peu plus avancées.

Indexes Multiples

Vous aurez besoin de cette configuration si vous disposez de plusieurs source (même hétérogène) et que vous voudrez mettre en place une recherche sur l'ensemble.

Ceci est également utile si vous faite du sharding avec votre base de données. Lorsque vous générez votre index, vous pouvez réunir vos informations en utilisant un index distribués et donc avoir une recherche unique.

Cette technique permet de faire une recherche sur une partie ou sur plusieurs ou sur toutes.

La pierre d’achoppement de cette technique est de garantir que les ids toute source confondue soient uniques

Avantages:

Recherche simple entre plusieurs sources de données, même sur des serveurs différents.

Inconvénients:

  • Nécessite souvent d'une astuce pour garantir l'unicité des identifiants d'index pour éviter les chevauchements de données.
  • Peut nécessiter un script spécial pour générer un fichier de configuration Sphinx

Services Multiples

Note: Depuis la version 1.10-beta Sphinx supporte le multithreading par lui-même, ce qui devrait résoudre les problèmes de performance dont nous parlons dans cette approche, la rendant potentiellement caduque.

Pour utiliser la pleine puissance d'un CPU multi-core il est logique d'exécuter plusieurs instances du Sphinx.

Pour cela, vous devez appliquer une structure d'indexs multiples où chaque index est responsable uniquement d'une partie des données.

Par exemple, pour utiliser un processeur à quatre cœurs, une des options est de couvrir les données avec 4 index où chaque index est utilisé par un processus distinct searchd. Ensuite, chaque instance Sphinx va utiliser l'un des cœurs de processeurs.

Il faudra donc adapter le sql de collecte des informations pour répartir les données sur autant de fichier d'index que désiré.

Avec quelque chose du style

[sql] 
where (id Mod 1) =0

On a ensuite besoin d'un sphinx master qui s'occupe de répondre au query et de l'assemblage des résultats

Ce master qui prendra en charge la requête peut aussi prendre en charge un des index partiels.

Une autre façon de mettre cela en œuvre consiste à utiliser les agents de Sphinx accédant à l'instance de Sphinx. De cette façon, vous obtiendrez de multi-traitement dont nous avons besoin ici.

Avantages:

  • grands performances de recherche sur les systèmes multi-cpu
  • Bonne technique de scaling selon votre site / projet et sa progression

Inconvénients:

  • Pas facile à mettre en œuvre
  • Peut nécessiter un script spécial pour générer un fichier de configuration Sphinx

Astuce: Mettre les différents index sur des disques physiques distincts peut donner encore plus de performance en vitesse de lecture de données

Serveurs Multiples

Un cluster Sphinx est un ensemble de plusieurs serveurs avec la configuration décrite juste avant.

Dans cette configuration, chaque serveur possède son master Sphinx par exemple et l'un des serveurs est choisi en tant que collecteur. Il revient à ce dernier la tâche de distribuer les requêtes entre tous les serveurs utilisant chacun l'index qu'ils hébergent.

Utiliser un cluster Sphinx va faire grimper le trafic réseau au point que votre réseau puisse devenir le goulot d'étranglement.

Cette configuration permet de mettre une recherche rapide pour de très grandes quantités de données, et de manière très scalaire mais elle n'est vraiment pas simple à mettre en œuvre - vous aurez besoin d'élaborer un cadre solide pour la distribution des données entre toutes les instances dans le cluster.

Avantages:

  • Très haute performance
  • Configuration très évolutive

Inconvénients:

  • Pas facile à mettre en œuvre
  • Requiert un script spécial pour générer des fichiers de configuration Sphinx
  • Requiert plusieurs serveurs
  • La vitesse de recherche dépend de la vitesse du réseau

Je n'ai pas pondu tout ceci.

Ces 2 posts sont fortement inspiré de five ways to configure sphinx search engine

Comme pour la première partie, j'ai l'intention de compléter ces 2 posts avec des exemples de configuration.