powered by CADENAS

Manual

Manual

1.7.5.9.7.2. Caching / Geometrischer Suchindex ab V9.08

1.7.5.9.7.2.1. Struktur der Indizes

Mit V9.08 ergeben sich einige Änderungen bezüglich Speicherort und Dateien:

Speicherort

$CADENAS_DATA\index\cat\...\

Der Geo-Index und der Topo-Index werden nun getrennt gespeichert.

Der neue Geo-Index liegt im Unterordner geoindexv2 (neben dem "alten" geoindex), der Topo-Index im Ordner topoindex.

Folgende Dateien liegen im Verzeichnis geoindexv2:

  1. geomsearch.fdb:

    Diese Datei enthält die Fingerprints für die einzelnen Algorithmen.

  2. geomsearch.cidb:

    Diese Datei enthält Informationen über das Teil, die nur bei der Erzeugung der Fingerprints relevant sind, d.h. diese Informationen müssen für die Suche nicht gelesen werden.

  3. geomsearch.ldx:

    Diese Datei enthält den Linearen Index für die einzelnen Suchvorlagen.

  4. geomsearch.ofm: Diese Datei enthält ein Mapping von Projektpfaden auf die internen IDs des Geo-Index.

    In einem bestimmten Modus werden die Updates des Geo-Index nicht direkt in den Geo-Index integriert, sondern in spezielle Dateien gespeichert, um den Vorgang zu beschleunigen. Weitere Informationen hierzu finden Sie unter Abschnitt 1.7.5.9.7.2.3, „Erzeugung von Geo- und Topo-Indizes“. Die folgenden Dateien werden dafür verwendet:

    • geomsearch.ufdb: Enthält die Fingerprints der Änderungen.

    • geomsearch.ucidb: Enthält Informationen der Änderungen, die bei Suche nicht relevant.

    • geomsearch.uop: Enthält alle nötigen Informationen um die Fingerprints der Änderungen in den Geo-Index integrieren zu können. Unter Umständen wird der Geo-Index gerade bearbeitet.

      In diesem Fall befindet sich eine weitere Datei in diesem Verzeichnis:

      geomsearch.lock: Verhindert, dass während des Schreibens auf den Geo-Index zugegriffen wird.

Folgende Dateien liegen im Verzeichnis topoindex:

  1. topoindex.bin: Diese Datei enthält die strukturierten Topo-Daten.

  2. topoindex.idx: Diese Datei enthält Indizes für die Suche auf den Daten.

    Auch beim Topo-Index gibt es die Möglichkeit der schnellen Updates. Dann liegen noch folgende Dateien in dem Verzeichnis:

    • topoindex.dupd: Die Struktur-Daten der Änderungen

    • topoindex.upd: Informationen, um die Änderungen in den Index integrieren zu können. Eventuell ist auch dieses Verzeichnis gelockt:

    • topoindex.lock: Verhindert, dass während des Schreibens auf den Topo-Index zugegriffen wird.

1.7.5.9.7.2.2. geomsearch.cfg -> Block [settings] - Allgemeine Einstellungen

Unter $CADENAS_SETUP/geomsearch.cfg können einige Einstellungen gemacht werden. Diese sind im Block [settings] zusammengefasst.

  1. Schlüssel: searchindex

    Bestimmen Sie, welcher Geo-Index für die Suche verwendet werden soll. Mögliche Werte:

    • old: Verwende alten Index

    • new: Verwende neuen Index

    • both: Verwende neuen Index, falls nicht vorhanden, alten Index

  2. Schlüssel: toposearchindex

    Bestimmen Sie, welcher Topo-Index für die Suche verwendet werden soll. Mögliche Werte:

    • old: Verwende alten Geo-Index

    • new: Verwende neuen Index

    • both: Verwende neuen Index, falls nicht vorhanden, alten Geo-Index

  3. Schlüssel: convertindex und converttopoindex

    Konvertierung alter Indizes in neue Indizes. Mögliche Werte:

    • 0: Konvertierung deaktiviert

    • 1: Konvertierung aktiv. Die Konvertierung erfolgt dann automatisch, wenn ein alter Index erzeugt wird.

  4. Schlüssel: createNewDirectly

    Steuerung, ob alter oder neuer Index erzeugt werden soll. Mögliche Werte:

    • 0: Alten Index erzeugen

    • 1: Neuen Index erzeugen

  5. Schlüssel: createNewLinIndex

    Soll der lineare Index bei der Konvertierung neu erzeugt werden? Mögliche Werte:

    • 0: Alten linearen Index konvertieren. Da dieser Index weniger Pivot-Elemente verwendet, ist die Suche dann etwas langsamer. Dafür geht die Konvertierung sehr schnell.

    • 1: Linearen Index neu erzeugen

1.7.5.9.7.2.3. Erzeugung von Geo- und Topo-Indizes

Für die Erzeugung der Indizes gibt es grundsätzlich 3 Möglichkeiten:

  1. Neu-Erzeugung des Geo-Index

  2. Update des vorhandenen Index (Arbeiten auf Kopie). Hier kann der vorhandene Index auch ein alter Geo-Index sein. Dieser wird dann automatisch konvertiert.

  3. Update des vorhandenen Index (Arbeiten mit speziellen Update-Dateien). Sinnvoll, wenn man auf großen Katalogen kleine Änderungen macht.

    • Variante 3 ist wesentlich schneller als Variante 2, besonders auf großen Katalogen.

    • Variante 3 hat den Nachteil, dass die Suche langsamer wird, je mehr dieser Updates hinzugefügt werden. Deshalb ist es sinnvoll, hin und wieder den Index im Modus 2 zu aktualisieren, da die Updates dann komplett in den Index integriert werden.

    • Die Pivot-Elemente des Linearen Index werden in Variante 3 nicht neu bestimmt. Auch das kann sich negativ auf die Suchzeiten auswirken.

Weitere Hinweise

  • Die Erzeugung von Geo- und Topo-Index geschieht immer gemeinsam.

  • Grundsätzlich gilt auch hier wie bei der Migration, dass mit 64 Bit eine bessere Performanz erzielt werden kann.

  • Während der Generierung der Indizes sind die Verzeichnisse vom Geo- und Topo-Index gelockt. Die Varianten 1 und 2 arbeiten auf einer temporären Kopie. Hier wird das Verzeichnis am Anfang nur für Schreibzugriffe gesperrt, d.h. der Index kann noch gelesen werden. Der Index muss nur kurz für das Lesen gesperrt werden, wenn die alten Dateien gelöscht und die temporären umbenannt werden. Die 3. Variante arbeitet nicht auf einer Kopie. Deshalb muss während des gesamten Updates gelockt werden.

  • Über den Schlüssel ThreadCountForLinearIndexCreator im Block settings_32 bzw. settings_64 kann festgelegt werden, wie viele Threads verwendet werden sollen, um den linearen Index zu erzeugen. Setzt man den Wert auf -1, dann wird die Anzahl der Kerne herangezogen. Jeder Thread benötigt unter Umständen einige hundert MB Arbeitsspeicher, deshalb machen zu hohe Werte für 32 Bit keinen Sinn.

    Beispiel:

    [settings_32]
    ThreadCountForLinearIndexCreator=2
    
    [settings_64]
    ThreadCountForLinearIndexCreator=-1
1.7.5.9.7.2.4. Änderungen bei der eigentlichen Suche

Für Geo- und Topo-Index gibt es jeweils 3 verschiedene Modi für die Ausführung der Suche, je nachdem, was in der geomsearch.cfg im Block settings festgelegt wurde (siehe oben).

  • new: Nur der neue Index wird verwendet, wenn nicht verfügbar, gibt es für diesen Katalog keine Ergebnisse.

  • both: Falls möglich, wird der neue Index verwendet. Nicht verfügbare Indizes werden gegebenfalls im Speicher konvertiert.

  • old: Suche mit alten Indizes

Außerdem wird ab V9.08 für die Skizzensuche auch der Lineare Index verwendet, um die Suchzeit zu reduzieren.

1.7.5.9.7.2.5. Caching-Einstellungen

Alle Caching-Einstellungen können für PARTdataManager 32 Bit und 64 Bit unterschiedlich gesetzt werden.

Geo-Suche
  • LinIndexCacheSize: Größe des Caches für den linearen Index in KB

    Wählen Sie den Wert so, dass er nicht ganz ausgeschöpft wird.

    Wenn dies nicht möglich ist, den hierfür primären Speicher (SampleLineCacheSize) klein wählen.

    [CACHEV2_GEO_SEARCH_32]
    LinIndexCacheSize=100000

    [CACHEV2_GEO_SEARCH_64]
    LinIndexCacheSize=300000
  • OffsetCacheSize: Größe des Caches für den Offset-Index in KB

    Wählen Sie den Werte so, dass er nicht ganz ausgeschöpft wird.

    Wenn dies nicht möglich ist, den hierfür primären Speicher (SampleLineCacheSize) klein wählen.

    [CACHEV2_GEO_SEARCH_32]
    OffsetCacheSize=50000

    [CACHEV2_GEO_SEARCH_64]
    OffsetCacheSize=150000
  • GeoIndexV2CacheSize: Anzahl von Geo-Indizes, die gleichzeitig geöffnet sein können.

    Setzen Sie den Wert so, dass er der maximale Anzahl an Katalogen entspricht.

    [CACHEV2_GEO_SEARCH_32]
    GeoIndexV2CacheSize=1000

    [CACHEV2_GEO_SEARCH_64]
    GeoIndexV2CacheSize=1000
  • SampleLineCacheSize: Cache für Fingerprints in KB

    Cache ist für alle Threads (entspricht in der Regel der Anzahl der Prozessorkerne zusammen)

    [CACHEV2_GEO_SEARCH_32]
    SampleLineCacheSize=100000

    [CACHEV2_GEO_SEARCH_64]
    SampleLineCacheSize=500000
  • LogFileName: Hier werden Log-Informationen gespeichert falls nicht leer. Siehe unten.

    Setzen Sie den Schlüssel selbst, sofern er nicht vorhanden ist.

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

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

[Wichtig] Wichtig

Bei der Geo-Suche sollte man nach folgenden Regeln die Werte setzen:

  1. LinIndexCacheSize und OffsetCacheSize so groß wählen, dass sie nicht ganz voll werden. Wenn dies nicht möglich ist, Speicher primär hierfür, SampleLineCacheSize klein wählen.

  2. Falls noch Speicher übrig, setzen Sie SampleLineCacheSize so groß wie möglich.

Including / excluding catalogs

The setting can be used for Server environments in order to exclude catalogs or to load only special catalogs.

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

Also compare $CADENAS_USER/varsearch.cfg -> [VariableSearch:Path]:

The setting under geomsearch.cfg is used to cache the geometrical index, the one under $CADENAS_USER/varsearch.cfg [VariableSearch:Path] is used to cache the index for variable and full-text search.

Topo-Suche
  • ObjectDataCacheSize: Cache für Topo-Daten-Knoten

    Insbesondere wichtig für die Migration.

    [CACHE_TOPO_SEARCH_32]
    ObjectDataCacheSize=200000

    [CACHE_TOPO_SEARCH_64]
    ObjectDataCacheSize=1000000
  • IndexCacheSize: Cache für Indizes auf den Topo-Daten

    Insbesondere wichtig für die Topo-Suche.

    [CACHE_TOPO_SEARCH_32]
    IndexCacheSize=200000

    [CACHE_TOPO_SEARCH_64]
    IndexCacheSize=500000
  • LogFileName: Hier werden Log-Informationen gespeichert, falls nicht leer. Siehe auch Abschnitt 1.7.5.9.7.2.6, „Log-Datei auswerten - Beste Einstellungen finden“.

    Setzen Sie den Schlüssel selbst, sofern er nicht vorhanden ist.

    [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.7.5.9.7.2.6. Log-Datei auswerten - Beste Einstellungen finden

Mittels der oben erwähnten Log-Dateien (Schlüssel LogFileName) können die Sucheinstellungen für die vorhandenen Daten und das Suchverhalten optimiert werden. Aus der Log-Datei kann entnommen werden, wie voll die jeweiligen Caches sind und wie oft bei einem Zugriff das Element tatsächlich im Cache war (Cache-Hit).

Beispiel:

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

Einige Hinweise für die Interpretation der Daten:

  1. Die Log-Datei wird unter Umständen erst vor der nächsten Suche aktualisiert.

  2. Um mithilfe der Log-Datei sinnvolle Einstellungen zu machen, ist es wichtig, mehrere Suchen ausführen, die in etwa dem normalen Benutzerverhalten entspricht, zum Beispiel bei der Auswahl der Suchvorlagen, Skizzensuche oder 3D-Suche, aber auch bei der Auswahl der Suchteile.

  3. Die Informationen über Cache-Hits und Cache-Misses, die nach jeder Suche ausgegeben werden, sind kumulativ.

  4. Die Daten werden immer erst beim ersten Zugriff in den Cache geladen. Also ist der erste Zugriff auf Daten immer ein Cache-Miss. Je mehr Suchen ausgeführt, desto weniger Cache-Misses sollten hinzukommen.

1.7.5.9.7.2.7. Zugriff auf Topo-Werte über VBS

Auf die Topo-Werte kann folgendermaßen zugegriffen werden:

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