1.6.5.8.11.2. Mise en cache / Index de recherche géométrique à partir de la V9.08

1.6.5.8.11.2.1. Structure des indices

La V9.08 entraîne quelques modifications concernant l'emplacement et les fichiers :

Lieu de stockage

$CADENAS_DATA\index\cat\...\

L'index géographique et l'index topo sont désormais enregistrés séparément.

Le Le nouveau géo-index se trouve dans le sous-dossier geoindexv2 (à côté de l'"ancien » geoindex ), l’index topographique dans le dossier topoindex.

Les fichiers suivants se trouvent dans le répertoire geoindexv2:

  1. geomsearch.fdb:

    Ce fichier contient les empreintes digitales pour chaque algorithme.

  2. geomsearch.cidb:

    Ce fichier contient des informations sur la pièce qui ne sont pertinentes que pour la création des empreintes digitales, c'est-à-dire que ces informations ne doivent pas être lues pour la recherche.

  3. geomsearch.ldx:

    Ce fichier contient l'index linéaire pour les différents modèles de recherche.

  4. geomsearch.ofm: Ce fichier contient un mapping des chemins d'accès au projet vers les ID internes du géo-index.

    Dans un mode particulier, les mises à jour du Géo-Index ne sont pas intégrées directement dans le Géo-Index, mais sont enregistrées dans des fichiers spéciaux afin d'accélérer le processus. Vous trouverez plus d'informations à ce sujet sur Section 1.6.5.8.11.2.3, «  Création d'index géographiques et topographiques ». Les fichiers suivants sont utilisés à cet effet :

    • geomsearch.ufdb: contient les empreintes des modifications.

    • geomsearch.ucidb: Contient des informations des modifications qui ne sont pas pertinentes lors de la recherche.

    • geomsearch.uop: contient toutes les informations nécessaires pour pouvoir intégrer les empreintes digitales des modifications dans le géo-index. Il se peut que le géo-index soit en cours de modification.

      Dans ce cas, un autre fichier se trouve dans ce répertoire :

      geomsearch.lock: Empêche l'accès au géo-index pendant l'écriture.

Les fichiers suivants se trouvent dans le répertoire topoindex:

  1. topoindex.bin: Ce fichier contient les données topo structurées.

  2. topoindex.idx: Ce fichier contient des index pour la recherche sur les données.

    Pour l'index topo, il existe également la possibilité de mises à jour rapides. Ensuite, les fichiers suivants se trouvent encore dans le répertoire :

    • topoindex.dupd: Les données structurelles des modifications

    • topoindex.upd: informations pour pouvoir intégrer les modifications dans l'index. Il se peut que ce répertoire soit également verrouillé :

    • topoindex.lock: Empêche l'accès à l'index topo pendant l'écriture.

1.6.5.8.11.2.2.  geomsearch.cfg -> Bloc [settings] - Paramètres généraux

Sous $CADENAS_SETUP/geomsearch.cfg, il est possible d'effectuer quelques réglages. Ceux-ci sont regroupés dans le bloc [settings].

  1. Clé : searchindex

    Déterminez quel géo-index doit être utilisé pour la recherche. Valeurs possibles :

    • old: Utiliser l'ancien index

    • new: Utiliser un nouvel index

    • both: Utiliser le nouvel index, s'il n'existe pas, l'ancien index

  2. Clé : toposearchindex

    Déterminez quel topo-index doit être utilisé pour la recherche. Valeurs possibles :

    • old: Utilise l'ancien géo-index

    • new: Utiliser un nouvel index

    • both: Utiliser le nouvel index, si non disponible, l'ancien géo-index

  3. Clé : convertindex et converttopoindex

    Conversion d'anciens indices en nouveaux indices. Valeurs possibles :

    • 0: Conversion désactivée

    • 1: Conversion active. La conversion est alors automatique lorsqu'un ancien index est créé.

  4. Clé : createNewDirectly

    Contrôle si l'ancien ou le nouvel index doit être créé. Valeurs possibles :

    • 0: créer un ancien index

    • 1: Créer un nouvel index

  5. Clé : createNewLinIndex

    L'index linéaire doit-il être recréé lors de la conversion ? Valeurs possibles :

    • 0: convertir un ancien index linéaire. Comme cet index utilise moins d'éléments pivots, la recherche est alors un peu plus lente. En revanche, la conversion est très rapide.

    • 1: Recréer un index linéaire

1.6.5.8.11.2.3.  Création d'index géographiques et topographiques

Il existe en principe 3 possibilités pour la création des index:

  1. Génération d'un nouveau géo-index

  2. Mise à jour de l'index existant (travail sur copie). Dans ce cas, l'index existant peut aussi être un ancien géo-index, qui sera alors automatiquement converti.

  3. Mise à jour de l'index existant (travail avec des fichiers de mise à jour spéciaux). Utile si l'on fait de petites modifications sur de grands catalogues.

    • La variante 3 est beaucoup plus rapide que la variante 2, surtout sur les grands catalogues.

    • La variante 3 a l'inconvénient de ralentir la recherche au fur et à mesure que ces mises à jour sont ajoutées. C'est pourquoi il est judicieux d'actualiser de temps en temps l'index en mode 2, car les mises à jour sont alors entièrement intégrées dans l'index.

    • Les éléments pivots de l'index linéaire ne sont pas redéfinis dans la variante 3. Cela peut également avoir un effet négatif sur les temps de recherche.

Plus d'informations

  • La création de l'index géographique et de l'index topographique se fait toujours en même temps.

  • En principe, comme pour la migration, les 64 bits permettent d'obtenir de meilleures performances.

  • Pendant la génération des index, les répertoires sont verrouillés par l'index géo et l'index topo. Les variantes 1 et 2 travaillent sur une copie temporaire. Ici, le répertoire n'est verrouillé au début que pour les accès en écriture, c'est-à-dire que l'index peut encore être lu. L'index ne doit être brièvement verrouillé en lecture que si les anciens fichiers sont supprimés et les temporaires renommés. La variante 3 ne travaille pas sur une copie. C'est pourquoi il faut verrouiller pendant toute la mise à jour.

  • À propos de la clé ThreadCountForLinearIndexCreator en bloc settings_32 ou settings_64 peut être défini combien de fils doivent être utilisés pour décrire le linéaire Index. Si vous définissez la valeur sur -1, alors le nombre de Graines. Chaque fil peut avoir besoin de quelques cent Mo de RAM, donc faites des valeurs trop élevées pour 32 bits n’a aucun sens.

    exemple :

    [settings_32]
    ThreadCountForLinearIndexCreator=2
    
    [settings_64]
    ThreadCountForLinearIndexCreator=-1

1.6.5.8.11.2.4. Modifications de la recherche proprement dite

Pour Indice Géo et Topo, il y en a 3 chacun différents modes d’exécution de la recherche, en fonction de ce que dans le geomsearch.cfg du bloc settings (voir ci-dessus).

  • new: Seul le nouvel index est utilisé, s'il n'est pas disponible, il n'y a pas de résultats pour ce catalogue.

  • both: si possible, le nouvel index est utilisé. Les index non disponibles sont, le cas échéant, convertis en mémoire.

  • old: Recherche avec d'anciens index

En outre, à partir de la V9.08, l'index linéaire est également utilisé pour la recherche d'esquisses afin de réduire le temps de recherche.

1.6.5.8.11.2.5.  Paramètres de mise en cache

Tous les paramètres de mise en cache peuvent être définis différemment pour PARTdataManager 32 bits et 64 bits.

Recherche géographique
  • LinIndexCacheSize: taille du cache pour l'index linéaire en Ko

    Choisir une valeur qui ne soit pas totalement épuisée.

    Si cela n’est pas possible, le Mémoire primaire ( SampleLineCacheSize ) petite choisir.

    [CACHEV2_GEO_SEARCH_32]
    LinIndexCacheSize=100000

    [CACHEV2_GEO_SEARCH_64]
    LinIndexCacheSize=300000

  • OffsetCacheSize: taille du cache pour l'index de décalage en Ko

    Choisissez des valeurs qui ne sont pas entièrement utilisées.

    Si cela n’est pas possible, le Mémoire primaire ( SampleLineCacheSize ) petite choisir.

    [CACHEV2_GEO_SEARCH_32]
    OffsetCacheSize=50000

    [CACHEV2_GEO_SEARCH_64]
    OffsetCacheSize=150000

  • GeoIndexV2CacheSize: Nombre d'index géographiques qui peuvent être ouverts en même temps.

    Définissez la valeur de manière à ce qu'elle corresponde au nombre maximal de catalogues.

    [CACHEV2_GEO_SEARCH_32]
    GeoIndexV2CacheSize=1000

    [CACHEV2_GEO_SEARCH_64]
    GeoIndexV2CacheSize=1000

  • SampleLineCacheSize: Cache pour les empreintes digitales en Ko

    Le cache est pour tous les threads (correspond en général au nombre de cœurs de processeur réunis)

    [CACHEV2_GEO_SEARCH_32]
    SampleLineCacheSize=100000

    [CACHEV2_GEO_SEARCH_64]
    SampleLineCacheSize=500000

  • LogFileName: les informations du journal sont enregistrées ici si elles ne sont pas vides. Voir ci-dessous.

    Placez vous-même la clé, si elle n'est pas disponible.

    [CACHEV2_GEO_SEARCH_32]
    LogFileName=c:\log\cachev2_geo_search_32.log

    [CACHEV2_GEO_SEARCH_64]
    LogFileName=c:\log\cachev2_geo_search_64.log

[Important]Important

Lors de la géolocalisation, il convient de définir les valeurs selon les règles suivantes :

  1. Choisir LinIndexCacheSize et OffsetCacheSize suffisamment grands pour qu'ils ne soient pas complètement remplis. Si cela n'est pas possible, choisir la mémoire primaire pour cela, SampleLineCacheSize petite.

  2. S’il reste de la mémoire, réglez SampleLineCacheSize si grand autant que possible.

Including / excluding catalogs

Ce paramètre peut être utilisé pour les environnements de serveur afin d'exclure des catalogues ou de ne charger que des catalogues spéciaux.

#:VALS_S
#:HELP;default;Include catalog, if the expression matches.
PreloaderIncludeRegexPos=
#:HELP;default;Include catalog, if the expression doesn't match.
PreloaderIncludeRegexNeg=
#:VALS_S
#:HELP;default;Exlucde catalog, if the expression matches.
PreloaderExcludeRegexPos=.*copyright\.prj$|.*_qa$|.*_dev$
#:VALS_S
#:HELP;default;Exclude catalog, if the expression doesn't match.
PreloaderExcludeRegexNeg=

Donc comparez $CADENAS_USER/varsearch.cfg -> [VariableSearch:Path] :

Le sous geomsearch.cfg est utilisé pour mettre en cache le geometrical, celui sous $CADENAS_USER/varsearch.cfg [VariableSearch:Path] est utilisé pour mettre en cache l’index pour la variable et la recherche en texte intégral.

Recherche topo
  • ObjectDataCacheSize: Cache pour les nœuds de données topo

    Particulièrement important pour la migration.

    [CACHE_TOPO_SEARCH_32]
    ObjectDataCacheSize=200000

    [CACHE_TOPO_SEARCH_64]
    ObjectDataCacheSize=1000000

  • IndexCacheSize: Cache pour les indices sur les données topo

    Particulièrement important pour la recherche topo.

    [CACHE_TOPO_SEARCH_32]
    IndexCacheSize=200000

    [CACHE_TOPO_SEARCH_64]
    IndexCacheSize=500000

  • LogFileName: Les informations du journal sont enregistrées ici si elles ne sont pas vides. Voir aussi Section 1.6.5.8.11.2.6, «  Analyser le fichier journal - trouver les meilleurs réglages ».

    Placez vous-même la clé, si elle n'est pas disponible.

    [CACHE_TOPO_SEARCH_32]
    LogFileName=c:\log\cachev2_topo_search_32.log

    [CACHE_TOPO_SEARCH_64]
    LogFileName=c:\log\cachev2_topo_search_64.log

1.6.5.8.11.2.6.  Analyser le fichier journal - trouver les meilleurs réglages

À l’aide des fichiers journaux mentionnés ci-dessus (clé LogFileName ), le Paramètres de recherche pour les données existantes et le comportement de recherche optimisé. Le fichier journal indique à quel point la caches respectifs et la fréquence à laquelle l’élément était en fait dans le cache (cache hit).

exemple:

Search from Do 12. Dez 22:41:09 2013
Thread: 0xce8

Geometrical index cache: 
Capacity of the cache: 1000
In use: 18 (1.80%)
Free: 982 (98.20%)
Accesses to the cache: 6489
Cache hits: 6471 (99.72%)
Cache misses: 18 (0.28%)

Linear index cache: 
Capacity of the cache: 100000
In use: 4962 (4.96%)
Free: 95038 (95.04%)
Accesses to the cache: 1932
Cache hits: 1615 (83.59%)
Cache misses: 317 (16.41%)

Offset index cache: 
Capacity of the cache: 50000
In use: 1617 (3.23%)
Free: 48383 (96.77%)
Accesses to the cache: 7033
Cache hits: 6716 (95.49%)
Cache misses: 317 (4.51%)

Sample lines cache: 
Capacity of the cache: 100000
In use: 82785 (82.78%)
Free: 17215 (17.22%)
Accesses to the cache: 16840
Cache hits: 10985 (65.23%)
Cache misses: 5855 (34.77%)

Quelques indications pour l'interprétation des données :

  1. Il se peut que le fichier journal ne soit mis à jour qu'avant la prochaine recherche.

  2. Afin d'effectuer des réglages judicieux à l'aide du fichier journal, il est important d'effectuer plusieurs recherches qui correspondent plus ou moins au comportement normal de l'utilisateur, par exemple lors de la sélection des modèles de recherche, de la recherche d'esquisses ou de la recherche 3D, mais aussi lors de la sélection des pièces de recherche.

  3. Les informations sur les succès et les échecs en matière de cache, qui sont fournies après chaque recherche, sont cumulatives.

  4. Les données ne sont toujours chargées dans le cache que lors du premier accès. Le premier accès aux données est donc toujours un échec de la mise en cache. Plus il y a de recherches effectuées, moins il devrait y avoir de cache-miss.

1.6.5.8.11.2.7. Accès aux valeurs topo via VBS

Il est possible d'accéder aux valeurs Topo de la manière suivante :

' main class to manage topology
set topoManager = CreateObject("cnstools.topomanager")

' fetch root node of topology tree
set catalogRoot = topoManager.findCatalogRoot("cat/norm/din")
stdprint("Number of project in din: " & catalogRoot.childCount)

' fetch project node
set prjNode = topoManager.findProjectNode("cat/norm/din", "anlagenbau/armaturen/
 din_11864_1_a_asmtab.prj")
stdprint("Number of lines in anlagenbau/armaturen/din_11864_1_a_asmtab.prj: " 
 & prjNode.childCount)

' fetch line node
set lineNode = topoManager.findLineNode("cat/norm/din", "anlagenbau/armaturen/
 din_11864_1_a_asmtab.prj", 20)

' helper to recursively print all the attributes of a node
sub printAttributes(node, indent)
	stdprint(indent & node.name)
	c = node.childCount
	for j = 0 to c - 1
		printAttributes(node.child(j), indent & "  ")
	next
	a = node.attributeCount
	for j = 0 to a - 1
		set attr = node.attribute(j)
		value = attr.value
		valueAsString = ""
		set attrType = attr.type
		if attrType = "doubleVec" then
			n = value.count
			for k = 0 to n - 1
				if k > 0 then
					valueAsString = valueAsString & ", "
				end if
				valueAsString = valueAsString & value.item(k)
			next
		else
			valueAsString = value
		end if
		stdprint(indent & "  " & attr.name & ": " & valueAsString)
	next
end sub

' print all attributes for a line
stdprint("Recursive list of all attributes in line 20:")
stdprint()
printAttributes(lineNode, "")
stdprint()

' print all attributes for a stl file
stdprint("Recursive list of all attributes in stl:")
stdprint()
set stlNode = topoManager.createNodeFrom3DFile("D:/stl/1 stl/001952002.stl", "STLFILE")
printAttributes(stlNode, "")

' print all attributes for a prt file
stdprint()
stdprint("Recursive list of all attributes in prt file:")
stdprint()
set prtNode = topoManager.createNodeFrom3DFile("D:/stl/ein paar proe-Dateien/
 1202t4100_gen.prt.1", "NATWILDFIREPART 5 32 BIT")
printAttributes(prtNode, "")

' print all attributes for a line (create fingerprints on the fly)
stdprint()
stdprint("Recursive list of all attributes in line 420:")
stdprint()
set lineNode2 = topoManager.createNodeFromProject("cat/norm/din", "anlagenbau/armaturen/
 din_11864_1_a_asmtab.prj", 420)
printAttributes(lineNode2, "")

' print all attributes for a project (create fingerprints on the fly)
stdprint()
stdprint("Recursive list of all attributes in project anlagenbau/armaturen/
 din_11864_1_a_asmtab.prj:")
stdprint()
set prjNode2 = topoManager.createNodeFromProject("cat/norm/din", "anlagenbau/armaturen/
 din_11864_1_a_asmtab.prj", -1)
printAttributes(prjNode2, "")