Je suis très confus au sujet de et. Voici ce que je comprends
autoSoftCommit - après un autoSoftCommit, si le serveur SOLR tombe en panne, les documents autoSoftCommit seront perdus.
autoCommit - effectue une validation matérielle sur le disque et assurez-vous que toutes les validations autoSoftCommit sont écrites sur le disque et valide tout autre document.
Ma configuration suivante semble être uniquement avec autoSoftCommit. autoCommit seul ne semble pas faire de commit. Y a-t-il quelque chose qui me manque?
<updateHandler class="solr.DirectUpdateHandler2">
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog>
<autoSoftCommit>
<maxDocs>1000</maxDocs>
<maxTime>1200000</maxTime>
</autoSoftCommit>
<autoCommit>
<maxDocs>10000</maxDocs>
<maxTime>120000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
</updateHandler>
pourquoi autoCommit fonctionne-t-il seul?
Vous avez openSearcher = false pour les validations dures. Ce qui signifie que même si la validation s'est produite, le chercheur n'a pas été redémarré et ne peut pas voir les modifications. Essayez de modifier ce paramètre et vous n'aurez pas besoin d'un soft commit.
SoftCommit rouvre le chercheur. Donc, si vous avez les deux sections, la validation logicielle affiche de nouvelles modifications (même si elles ne sont pas validées en dur) et - comme configuré - la validation en dur les enregistre sur le disque, mais ne change pas la visibilité.
Cela permet de mettre la validation logicielle à 1 seconde et d'afficher rapidement les documents et de réduire la fréquence des validations matérielles.
Je pense que cela article vous sera utile. Il explique en détail le fonctionnement de la validation matérielle et de la validation logicielle, ainsi que les compromis à prendre en compte lors du réglage de votre système.
Je frissonne toujours à ce sujet, car toute recommandation sera erronée dans certains cas. Ma première recommandation serait de ne pas trop réfléchir au problème. Certaines personnes très intelligentes ont essayé de rendre l'ensemble du processus robuste. Essayez d'abord les choses simples et ne modifiez que les choses nécessaires. En particulier, examinez la taille de vos journaux de transactions et ajustez vos intervalles de validation ferme pour conserver ces "tailles raisonnables". N'oubliez pas que la pénalité est principalement le temps de relecture impliqué si vous redémarrez après un crash de la JVM. Est-ce que 15 secondes sont tolérables? Pourquoi aller plus petit alors?
Nous avons vu des situations dans lesquelles l'intervalle de validation matérielle est beaucoup plus court que l'intervalle de validation logicielle, voir le bit d'indexation en masse ci-dessous.
Ce sont des points de départ.
INDEXATION LOURDE (VRAC)
L'hypothèse ici est que vous souhaitez obtenir un maximum de données dans l'index le plus rapidement possible pour une recherche future. Je pense aux charges originales d'une source de données, etc.
Définissez votre intervalle de validation logicielle assez longtemps. Comme dans 10 minutes. La validation douce concerne la visibilité, et mon hypothèse ici est que l'indexation en masse ne concerne pas la recherche en temps quasi réel, donc ne faites pas le travail supplémentaire d'ouverture de tout type de chercheur. Définissez vos intervalles de validation en dur à 15 secondes, openSearcher = false. Encore une fois, l'hypothèse est que vous allez simplement faire exploser des données chez Solr. Le pire des cas ici est que vous redémarrez votre système et que vous deviez rejouer 15 secondes environ des données de votre tlog. Si votre système rebondit plus souvent que cela, corrigez d'abord la raison. Ce n'est qu'après avoir essayé les choses simples que vous devriez envisager des améliorations, elles ne sont généralement nécessaires que dans des circonstances inhabituelles. Mais ils incluent: Désactiver complètement le tlog pour l'opération de chargement en bloc Indexation hors ligne avec une sorte de processus de réduction de carte Avoir uniquement un leader par fragment, pas de répliques pour la charge, puis activer les répliques plus tard et les laisser faire à l'ancienne réplication à rattraper. Notez que cela est automatique, si le nœud découvre qu'il est "trop éloigné" de la synchronisation avec le leader, il lance une réplication à l'ancienne. Une fois qu'il a rattrapé son retard, il obtient les documents au fur et à mesure qu'ils sont indexés sur le leader et conserve son propre journal. etc.
INDEX LOURD, QUERY-LIGHT
J'entends par là, disons, la recherche de fichiers journaux. C'est le cas où de nombreuses données arrivent sur le système à peu près tout le temps. Mais la charge des requêtes est assez légère, souvent pour dépanner ou analyser l'utilisation.
Définissez votre intervalle de validation logicielle assez longtemps, jusqu'à la latence maximale que vous pouvez supporter pour que les documents soient visibles. Cela pourrait prendre quelques minutes ou bien plus. Peut-être même des heures avec la possibilité d'émettre un commit dur (openSearcher = true) ou un soft commit à la demande. Définissez votre commit dur sur 15 secondes, openSearcher = false
INDEX-LIGHT, QUERY-LIGHT OR LOURD
Il s'agit d'un index relativement statique qui obtient parfois une petite rafale d'indexation. Dites toutes les 5 à 10 minutes (ou plus) que vous effectuez une mise à jour
À moins que la fonctionnalité NRT ne soit requise, j'omettre les validations logicielles dans cette situation et effectuer des validations fermes toutes les 5 à 10 minutes avec openSearcher = true. Il s'agit d'une situation dans laquelle, si vous indexez avec un seul processus d'indexation externe, il peut être judicieux que le client émette la validation ferme.
INDEX-LOURD, QUERY-LOURD
C'est le cas en temps quasi réel (NRT), et c'est vraiment le plus délicat du lot. Celui-ci nécessitera de l'expérimentation, mais voici où je commencerais
Définissez votre intervalle de validation logicielle aussi longtemps que vous le pouvez. N'écoutez pas votre chef de produit qui dit "nous n'avons pas besoin de plus d'une seconde de latence". Vraiment. Repoussez-vous et voyez si l'utilisateur est le mieux servi ou le remarquera même. Les soft commits et NRT sont assez incroyables, mais ils ne sont pas gratuits. Définissez votre intervalle de validation matérielle sur 15 secondes.
Dans mon cas (index lourd, requête lourde), la réplication maître-esclave prenait trop de temps, ralentissant les requêtes vers l'esclave. En augmentant le softCommit à 15 min et en augmentant le hardCommit à 1 min, l'amélioration des performances était grande. Désormais, la réplication fonctionne sans problème et les serveurs peuvent gérer beaucoup plus de requêtes par seconde.
C'est mon cas d'utilisation cependant, j'ai réalisé que je n'ai pas vraiment besoin que les éléments soient disponibles sur le maître en temps réel, car le maître n'est utilisé que pour l'indexation des éléments, et de nouveaux éléments sont disponibles dans les esclaves à chaque cycle de réplication (5min ), ce qui est tout à fait correct pour mon cas. vous devez régler ces paramètres pour votre cas.
Les commits doux concernent la visibilité. les engagements durs concernent la durabilité. optimiser concerne les performances.
Les validations logicielles sont très rapides, des modifications sont visibles mais ces modifications ne sont pas persistantes (elles sont uniquement en mémoire).
Les modifications de validations matérielles sont persistantes sur le disque.
Optimiser est comme un engagement dur, mais il fusionne également les segments d'index solr en un seul segment pour améliorer les performances. Mais il est très coûteux.
Une opération de validation (validation ferme) rend les modifications d'index visibles pour les nouvelles demandes de recherche. Une validation matérielle utilise le journal des transactions pour obtenir l'ID des dernières modifications de document et appelle également fsync sur les fichiers d'index pour s'assurer qu'ils ont été vidés sur un stockage stable et qu'aucune perte de données ne résultera d'une panne de courant.
Une validation logicielle est beaucoup plus rapide car elle ne rend visibles que les modifications d'index et ne fsync pas les fichiers d'index ni n'écrit un nouveau descripteur d'index. En cas de panne de la JVM ou de panne de courant, les modifications intervenues après la dernière validation matérielle seront perdues. Les collections de recherche qui ont des exigences NRT (qui veulent que les changements d'index soient rapidement visibles pour les recherches) voudront effectuer une validation douce souvent mais une validation ferme moins fréquemment. Un softCommit peut être "moins cher" en termes de temps, mais pas gratuit, car il peut ralentir le débit.
Une optimisation est comme une validation matérielle, sauf qu'elle force d'abord tous les segments d'index à être fusionnés en un seul segment. Selon l'utilisation, cette opération doit être effectuée rarement (par exemple, la nuit), voire pas du tout, car elle implique la lecture et la réécriture de l'index entier. Les segments sont normalement fusionnés dans le temps (comme déterminé par la stratégie de fusion) et l'optimisation force simplement ces fusions à se produire immédiatement.
auto commit properties we can manage from sorlconfig.xml files.
<autoCommit>
<maxTime>1000</maxTime>
</autoCommit>
<!-- SoftAutoCommit
Perform a 'soft' commit automatically under certain conditions.
This commit avoids ensuring that data is synched to disk.
maxDocs - Maximum number of documents to add since the last
soft commit before automaticly triggering a new soft commit.
maxTime - Maximum amount of time in ms that is allowed to pass
since a document was added before automaticly
triggering a new soft commit.
-->
<autoSoftCommit>
<maxTime>1000</maxTime>
</autoSoftCommit>
Références: