1.6.5.8.11.2. Caching / Indice di ricerca geometrica a partire dalla V9.08

1.6.5.8.11.2.1. Struttura degli indici

Con la V9.08 sono state apportate alcune modifiche alla posizione di archiviazione e ai file:

Posizione di stoccaggio

$CADENAS_DATA\index\cat\...\

Il geoindice e il topoindice sono ora salvati separatamente.

Le nuovo geo-indice si trova nella sottocartella geoindexv2 (accanto al "vecchio" geoindex ), l'indice topografico nella cartella topoindex.

I seguenti file si trovano nella directory geoindexv2:

  1. geomsearch.fdb:

    Questo file contiene le impronte digitali dei singoli algoritmi.

  2. geomsearch.cidb:

    Questo file contiene informazioni sulla parte che sono rilevanti solo per la generazione delle impronte digitali, cioè non devono essere lette per la ricerca.

  3. geomsearch.ldx:

    Questo file contiene l'indice lineare dei singoli modelli di ricerca.

  4. geomsearch.ofm: Questo file contiene una mappatura dei percorsi dei progetti con gli ID interni del geoindice.

    Sezione 1.6.5.8.11.2.3, “ Creazione di indici geo e topografici”In una certa modalità, gli aggiornamenti del geoindice non vengono integrati direttamente nel geoindice, ma salvati in file speciali per accelerare il processo. Per ulteriori informazioni, vedere . A questo scopo vengono utilizzati i seguenti file:

    • geomsearch.ufdb: contiene le impronte digitali delle modifiche.

    • geomsearch.ucidb: contiene informazioni sulle modifiche non rilevanti per la ricerca.

    • geomsearch.uop: contiene tutte le informazioni necessarie per integrare le impronte digitali delle modifiche nel geoindice. Il geoindice potrebbe essere in corso di modifica.

      In questo caso, c'è un altro file in questa directory:

      geomsearch.lock: impedisce l'accesso al geoindice durante la scrittura.

I seguenti file si trovano nella directory topoindex:

  1. topoindex.bin: Questo file contiene i dati topografici strutturati.

  2. topoindex.idx: questo file contiene gli indici per la ricerca dei dati.

    Il Topo-Index può anche essere aggiornato rapidamente. Nella directory si trovano anche i seguenti file:

    • topoindex.dupd: i dati di struttura delle modifiche

    • topoindex.upd: informazioni per integrare le modifiche nell'indice. Questa directory può anche essere bloccata:

    • topoindex.lock: impedisce l'accesso all'indice topo durante la scrittura.

1.6.5.8.11.2.2.  geomsearch.cfg -> Blocco [impostazioni] - Impostazioni generali

Alcune impostazioni possono essere effettuate in $CADENAS_SETUP/geomsearch.cfg. Queste sono riassunte nel blocco [settings].

  1. Legenda: searchindex

    Determina quale geoindice deve essere utilizzato per la ricerca. Valori possibili:

    • vecchio: usa il vecchio indice

    • nuovo: Usa un nuovo indice

    • entrambi: utilizzare il nuovo indice, se non disponibile, utilizzare il vecchio indice

  2. Legenda: toposearchindex

    Determina quale indice topografico deve essere utilizzato per la ricerca. Valori possibili:

    • vecchio: usa il vecchio geoindice

    • nuovo: Usa un nuovo indice

    • entrambi: utilizzare il nuovo indice, se non disponibile, utilizzare il vecchio geoindice

  3. Legenda: convertindex e converttopoindex

    Conversione dei vecchi indici in nuovi indici. Valori possibili:

    • 0: Conversione disattivata

    • 1: Conversione attiva. La conversione avviene automaticamente quando viene creato un vecchio indice.

  4. Chiave: createNewDirectly

    Controlla se deve essere generato un indice vecchio o nuovo. Valori possibili:

    • 0: Crea il vecchio indice

    • 1: Creare un nuovo indice

  5. Chiave: createNewLinIndex

    L'indice lineare deve essere rigenerato durante la conversione? Valori possibili:

    • 0: Converte il vecchio indice lineare. Poiché questo indice utilizza un numero inferiore di elementi pivot, la ricerca è leggermente più lenta. Tuttavia, la conversione è molto veloce.

    • 1: Generare un nuovo indice lineare

1.6.5.8.11.2.3.  Creazione di indici geo e topografici

Esistonofondamentalmente 3 opzioni per generare gli indici:

  1. Nuova generazione del geoindice

  2. Aggiornare l'indice esistente (lavorare sulla copia). L'indice esistente può anche essere un vecchio geoindice, che viene convertito automaticamente.

  3. Aggiornamento dell'indice esistente (lavorando con file di aggiornamento speciali). Utile se si apportano piccole modifiche a cataloghi di grandi dimensioni.

    • La variante 3 è molto più veloce della variante 2, soprattutto su cataloghi di grandi dimensioni.

    • La variante 3 ha lo svantaggio che la ricerca diventa più lenta con l'aggiunta di questi aggiornamenti, per cui ha senso aggiornare l'indice in modalità 2 di tanto in tanto, poiché gli aggiornamenti sono completamente integrati nell'indice.

    • Nella variante 3 non vengono ridefiniti gli elementi pivot dell'indice lineare. Questo può avere un effetto negativo sui tempi di ricerca.

Ulteriori informazioni

  • Gli indici geo e topo sono sempre generati insieme.

  • Come nel caso della migrazione, è possibile ottenere prestazioni migliori con i 64 bit.

  • Durante la generazione degli indici, le directory sono bloccate dall'indice geo e topo. Le varianti 1 e 2 lavorano su una copia temporanea. In questo caso, la directory è bloccata per l'accesso in scrittura solo all'inizio, vale a dire che l'indice può ancora essere letto. L'indice deve essere bloccato brevemente per la lettura solo quando i vecchi file vengono cancellati e quelli temporanei rinominati. La terza variante non funziona su una copia. Deve quindi essere bloccato durante l'intero aggiornamento.

  • Informazioni sulla chiave ThreadCountForLinearIndexCreator in blocco settings_32 o settings_64 possono essere impostati quanti thread dovrebbero essere usati per descrivere il lineare Indice. Se si imposta il valore su -1, il numero di semi. Ogni thread potrebbe richiedere alcuni cento MB di RAM, quindi fai valori troppo alti per 32 bit non ha senso.

    Esempio:

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

1.6.5.8.11.2.4. Modifiche alla ricerca vera e propria

Per Geo e Topo Index ce ne sono 3 ciascuno diverse modalità di esecuzione della ricerca, a seconda di ciò che nella geomsearch.cfg del blocco settings (vedi sopra).

  • nuovo: Viene utilizzato solo il nuovo indice; se non è disponibile, non ci sono risultati per questo catalogo.

  • entrambi: se possibile, viene utilizzato il nuovo indice. Se necessario, gli indici non disponibili vengono convertiti in memoria.

  • old: Ricerca con vecchi indici

A partire dalla versione V9.08, l'indice lineare viene utilizzato anche per la ricerca degli schizzi, al fine di ridurre i tempi di ricerca.

1.6.5.8.11.2.5.  Impostazioni della cache

Tutte le impostazioni della cache possono essere impostate in modo diverso per PARTdataManager a 32 e 64 bit.

Ricerca geografica
  • LinIndexCacheSize: dimensione della cache per l'indice lineare, in KB.

    Selezionare il valore in modo che non venga utilizzato completamente.

    Se ciò non è possibile, il memoria primaria ( SampleLineCacheSize ) piccola scegliere.

    [CACHEV2_GEO_SEARCH_32]
    LinIndexCacheSize=100000

    [CACHEV2_GEO_SEARCH_64]
    LinIndexCacheSize=300000

  • OffsetCacheSize: dimensione della cache per l'indice di offset, in KB.

    Selezionare i valori in modo che non vengano utilizzati completamente.

    Se ciò non è possibile, il memoria primaria ( SampleLineCacheSize ) piccola scegliere.

    [CACHEV2_GEO_SEARCH_32]
    OffsetCacheSize=50000

    [CACHEV2_GEO_SEARCH_64]
    OffsetCacheSize=150000

  • GeoIndexV2CacheSize: numero di geoindici che possono essere aperti contemporaneamente.

    Impostare il valore in modo che corrisponda al numero massimo di cataloghi.

    [CACHEV2_GEO_SEARCH_32]
    GeoIndexV2CacheSize=1000

    [CACHEV2_GEO_SEARCH_64]
    GeoIndexV2CacheSize=1000

  • SampleLineCacheSize: cache per le impronte digitali in KB

    La cache è per tutti i thread (di solito corrisponde al numero di core del processore insieme)

    [CACHEV2_GEO_SEARCH_32]
    SampleLineCacheSize=100000

    [CACHEV2_GEO_SEARCH_64]
    SampleLineCacheSize=500000

  • LogFileName: le informazioni di registro vengono salvate qui se non sono vuote. Vedere sotto.

    Impostate voi stessi la chiave se non è disponibile.

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

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

[Importante]Importante

I valori per la ricerca geografica devono essere impostati secondo le seguenti regole:

  1. Selezionare LinIndexCacheSize e OffsetCacheSize sufficientemente grandi da non essere completamente pieni. Se ciò non è possibile, selezionare una piccola SampleLineCacheSize per questa memoria primaria.

  2. Se è rimasta memoria, impostare SampleLineCacheSize così grande possibile.

Inclusi / esclusi i cataloghi

L'impostazione può essere utilizzata per gli ambienti Server per escludere i cataloghi o per caricare solo cataloghi speciali.

#: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=

Quindi confrontare $CADENAS_USER/varsearch.cfg -> [VariableSearch:Path]:

Le sotto geomsearch.cfg viene utilizzata per memorizzare nella cache il geometrica, quello sotto $CADENAS_USER/varsearch.cfg [VariableSearch:Path] viene utilizzato per memorizzare nella cache l'indice per la variabile e ricerca full-text.

Ricerca topo
  • ObjectDataCacheSize: cache per i nodi dei dati topografici

    Particolarmente importante per la migrazione.

    [CACHE_TOPO_SEARCH_32]
    ObjectDataCacheSize=200000

    [CACHE_TOPO_SEARCH_64]
    ObjectDataCacheSize=1000000

  • IndexCacheSize: cache per gli indici sui dati topografici.

    Particolarmente importante per la ricerca topografica.

    [CACHE_TOPO_SEARCH_32]
    IndexCacheSize=200000

    [CACHE_TOPO_SEARCH_64]
    IndexCacheSize=500000

  • LogFileName: le informazioni di registro vengono salvate qui se non sono vuote. Sezione 1.6.5.8.11.2.6, “ Analizzare il file di log - Trovare le impostazioni migliori” Vedere anche .

    Impostate voi stessi la chiave se non è disponibile.

    [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.  Analizzare il file di log - Trovare le impostazioni migliori

Utilizzando i file di log sopra menzionati (chiave LogFileName ), il Impostazioni di ricerca per i dati esistenti e il comportamento di ricerca ottimizzato. Il file di log mostra il livello di riempimento rispettive cache e la frequenza con cui l'elemento era effettivamente nella cache (cache hit).

Esempio:

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%)

Alcuni suggerimenti per l'interpretazione dei dati:

  1. Il file di registro può essere aggiornato solo prima della ricerca successiva.

  2. Per effettuare impostazioni significative utilizzando il file di log, è importante eseguire diverse ricerche che corrispondono approssimativamente al normale comportamento dell'utente, ad esempio quando si selezionano modelli di ricerca, ricerche di schizzi o ricerche 3D, ma anche quando si selezionano parti di ricerca.

  3. Le informazioni sulle visite alla cache e sulle mancate risposte alla cache, visualizzate dopo ogni ricerca, sono cumulative.

  4. I dati vengono caricati nella cache solo al primo accesso. Ciò significa che il primo accesso ai dati è sempre una cache miss. Maggiore è il numero di ricerche eseguite, minore dovrebbe essere il numero di miss della cache.

1.6.5.8.11.2.7. Accesso ai valori topografici tramite VBS

I valori topografici sono accessibili come segue:

' 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, "")