allegro-C 
MultiX  für  GigaBanken
 Mehrere Indexdateien statt nur einer 
ab V27.2 

Vor V25.5 ist es so gewesen: Jede Datenbank hat eine, aber nur eine Indexdatei. Diese kann bis zu 11 separate Register besitzen, mehr jedoch nicht. Man kann mit den Windows-Programmen und mit acon die 11 physischen Register in bis zu 100 logische Abteilungen zerlegen, denen man beliebige (aber immer dreibuchstabige) symbolische Namen zuteilt. Zum Beispiel DIS für die Abteilung im Register 1, deren Einträge mit D und Leerzeichen beginnen: 
I DIS 1D. "Dissertationen: Ort,Jahr"
Mit a99 und acon (also auch avanti) kann man seit `V26.6` in den logischen Registern so blättern als seien es physische, d.h. man sieht es ihnen nicht an, weil das Präfix dann nicht zu sehen ist. Im Indexfenster, oben in der Dropdown-Liste, findet man zur Auswahl neben den numerierten (physischen) Registern auch die Namen der symbolischen. 
 
Damit kommt man zwar sehr weit, es gab aber bislang eine unüberschreitbare Grenze: die gesamte Indexdatei konnte als Datei nur bis zu zwei Gigabyte groß werden. Das ist nicht eben wenig! Erstmals erreicht wurde diese Grenze mit der alten VK-Datenbank, als versucht wurde, deren 15 Mio. Sätze zusätzlich zu allem anderen auch noch mittels Phrasentechnik zu indexieren. 
Hoher Platzbedarf im Index ergibt sich vor allem aus folgenden fünf Anforderungen: 

1.	Phrasenindexierung, wie schon genannt 
2.	Zusätzlicher ALL-Index (sämtliche Wörter fast aller Datenfelder) 
3.	Linkstrunkierungs-Index  (alle Teilwörter enthaltend, die durch Abschneiden von links her entstehen) 
4.	Indexierung von Abstracts oder anderen Textpassagen 
5.	Besondere Register mit sehr langen Einträgen, z.B. als eine Art zusätzliche Kurztitelliste oder bei der sog. Register-Maskerade, bei der jeder Eintrag aus zwei Teilen besteht: dem Sortierteil und dahinter dem Anzeigeteil. 

Da nun einmal bibliothekarische Datenbanken zu unablässigem Wachstum neigen und außerdem die Erwartungen gleichfalls wachsen, was man denn wie abfragen oder präsentieren können sollte, sind die 2 GB keine gar so astronomische Zahl mehr. Wenn man bedenkt, daß heute bereits die billigsten Aldi-PCs mit wenigstens 80 GB Plattenspeicher daherkommen, fände auch niemand etwas dabei, wenn die Indexdatei 10 GB beanspruchte - wenn sie das denn könnte. Die vermeintlich großzügige Grenze wird also zu einer durchaus ärgerlichen Schranke. Datenbanken, die an dieser Barriere bisher gescheitert wären, nennen wir GigaBanken, der Betreiber einer solchen heißt GigaBanker. 

Die 2 GB sind nur leider aus Granit. Eine Art "Aufbohrung", wie sie ja für die Gesamtzahl der Sätze gelungen war, konnte aus technischen Gründen nicht gelingen. Als Ausweg aus dem Dilemma bot sich aber an: Statt nur einer Indexdatei könnte man mehrere ermöglichen. Der Weg zur Umsetzung dieser Idee wurde schon auf dem Expertentreffen 2005 skizziert, doch erst auf dem Treffen 2007 konnte mit V27.2 die fertige Lösung freigegeben werden. 

Am `Ende dieses Textes` findet der eilige Leser die zwei häufigsten Szenarien beschrieben und ganz knapp die wenigen Handgriffe, die dabei zu erledigen sind. Hier folgt zunächst noch eine detaillierte Beschreibung des Konzepts für neugierige Experten. 

"Transparenz" 
Schon immer konnte der Endnutzer nicht erkennen, ob die Register alle in einer Datei stehen oder in mehreren! Der OPAC-Nutzer bemerkt deshalb von der Erweiterung nichts. Es gibt keine zusätzlichen Buttons oder Menüpunkte, sondern nur vielleicht einen neuen symbolischen Registernamen, wenn ein neues Register hinzukommt. Der Endnutzer drückt nur auf die Knöpfe und das System öffnet die richtigen Dateien. Man könnte im Extremfall jedem Register eine eigene Datei geben. Empfohlen wird das aus Gründen der Leistung beim Speichern neuer Sätze zwar nicht, doch bei der Katalogbenutzung würde man davon nichts merken. 

Einfachheit der Einrichtung
Ganz ohne zusätzliches Wissen und Tun kommt der Systemverwalter zwar nicht aus, aber der Aufwand ist minimal. 
Für den Einrichter sieht die Lösung auf den ersten Blick so aus: Es gibt nicht mehr nur die eine Indexdatei cat.adx, sondern es können weitere hinzukommen, deren Namen dann  cat.azx lauten müssen. Für z kann man jeden Buchstaben und auch jede Ziffer einsetzen mit Ausnahme von d, denn die cat.adx gibt es ja schon. Zwischen Groß- und Kleinbuchstaben kann jedoch nicht unterschieden werden. Damit ergibt sich eine theoretische Gesamtzahl von 36 Indexdateien. Mit potentiellen 72 GB sollte nun jeder Anwender für eine lange Weile wieder ruhig schlafen können! 
Empfohlen wird jedoch, nicht gleich 10 oder mehr Indexdateien anzulegen, sondern sich erst einmal mit einer weiteren zu begnügen, in die man nichts weiter als das umfangreichste Register verlagert, um die alte Indexdatei zu entlasten. Jede der weiteren Indexdateien kann auch wiederum 11 Register umfassen. (Man sieht, wie sinnvoll die Unterscheidung der Begriffe "Index" und "Register" ist.) 

Der bisherige Index, z.B. cat.adx, bleibt bestehen und wird Primärindex genannt. An seiner Parametrierung braucht man nichts zu ändern. Er behält unter den Indexdateien eine Vorrangstellung, siehe unten Punkt 7. 

Für die weiteren Indexdateien wird keine zusätzliche Parameterdatei angelegt, die Schlüssel werden vielmehr alle in die bisherigen Parameter zusätzlich eingebaut. 

Oft wird es ja so sein, daß man bestimmte Schlüssel nicht mehr im Primärindex haben will, sondern in einem anderen - aus welchen Gründen auch immer, es müssen nicht unbedingt Platzgründe sein. Das ist leicht zu erreichen: 

1. Indexparameter
Als Indexpräfix setzt man statt "|1" den Wert "~z1", wenn ein Schlüssel nicht in den Primärindex soll, sondern in das Reg. 1 der Indexdatei z. 
Hinweis: "~d1" statt "|1" funktioniert nicht. 

2. Indexproduktion
INDEX.EXE und QRIX.EXE sind darauf eingerichtet, die neuartigen Indexpräfixe korrekt zu verarbeiten, also die Dateien cat.adx und eventuelle cat.azx im selben Durchlauf zu erzeugen. Man braucht dazu keine besondere Option zu setzen noch sonst irgendetwas zu tun. 
Selektiv indexieren: Will man z.B. nur die Indexdatei  cat.aex  neu erzeugen, startet man  index.exe  mit den Optionen  
-fi0 -Ze -@2 . 
Der Befehl, um der Demo-Datenbank den Index e hinzuzufügen, sieht so aus: 
index -fi0 -Ze -@2 -n0 -m0 -ka -d*DEMO2\CAT_* -eCAT/c:\ALLEGRO\DEMO2 
(Zu starten auf c:\allegro in der Standard-Installation, nachdem man den unten im Beispiel gezeigten Abschnitt eingebaut hat in cat.api). 
Hinweis: Bisher hat das Programm INDEX.EXE die Indexdatei unmittelbar selber hergestellt, wenn es sich um eine kleine Datenmenge handelte und deshalb nur eine Zwischendatei ii1 entstanden wäre. Das war Luxus und nur auf den ganz frühen, sehr langsamen PCs brachte es einen geringen Zeitgewinn. Jetzt wird in jedem Fall diese Zwischendatei erstellt und stets durch QRIX.EXE die Indexdatei angefertigt. INDEX.EXE ist dadurch kleiner geworden, was sich positiv auf die Anzahl der Zwischendateien auswirkt, und dieser Effekt macht sich bei großen Datenmengen bemerkbar, was sehr viel sinnvoller ist. 

3. Symbolische Register 
Wenn man eine Indexdatei  cat.aex  hat und deren Register 1 soll die symbolische Bezeichnung WFR (Wortfragmente) haben, Register 2 soll PHR (Phrasenindex) heißen, so kann man in den Indexparametern schreiben: 
I WFR e1 "Wortfragmente" 
I PHR e2 "Phrasenindex" 
Wenn der Buchstabe fehlt, gilt d (für .adx) - also der bisherige Standard. 
Mehr als 100 logische Register kann es insgesamt auch weiterhin nicht geben. Mehr als drei zusätzliche Indexdateien mit je 11 Registern wären also derzeit nicht sinnvoll, man könnte aber durchaus mehr Indexdateien mit nur je einem oder zwei Registern machen, was aus Effizienzgründen aber nicht ratsam ist. 

4. Zuordnung der 10 Registerbuttons 
Die 10 Buttons des Indexfensters sind im Normalfall den Registern der primären Indexdatei zugeordnet. Man kann aber jeden Button auch einer anderen Indexdatei zuordnen. Das geschieht mit dem neuen Befehl ix=...
Soll z.B. bei Druck auf Button 3 bzw. 5 nicht das Register 3 bzw. 5 der primären Indexdatei erscheinen, sondern jeweils dasjenige der e-Datei, so schreibt man in die Indexparameter: 
ix=ddededddddd 
Dies wurde deshalb so eingerichtet, damit man bei Bedarf jedes der numerierten Register in eine andere Indexdatei auslagern kann, ohne daß der Nutzer etwas merkt. Die Änderung der Indexparameter ist dann mininal: 
-- wo bisher "|3" steht, schreibt man "~e3" , 
-- dann die ix-Zeile mit dem e an der dritten Position und 
-- den Buchstaben e in die symbolischen Namen der Register einbauen (siehe 3.). 
-- Dann Index erneuern - und das war's. 
(Es würde, wenn's schnell gehen soll, genügen, zuerst einmal nur selektiv die Indexdatei e zu erstellen, siehe 2.) Wenn die primäre Datei dann immer noch andere Einträge in Reg. 3 bzw. 5 hat, kann man diese nur noch über symbolische Namen dieser Register erreichen. 

Der Parameter ix wirkt sich auch aus auf die FLEX-Befehle find, qrix und index, wenn dabei ein Zugriff per |i gemacht wird statt über symbolische Register. 
Die Überschriftszeilen für die Register 3 und 5, also die mit |3 und |5 beginnenden Zeilen in den Indexparametern, müssen nicht verändert werden, es sei denn man ändert etwas am Gehalt der betr. Register. 
Hinweis: Das Indexpräfix eines Registers behält seine Bedeutung. Wenn man in den Indexparametern p"|3" schreibt, ist damit immer das Register 3 des Primärindex gemeint, mit p"~e3" immer das Reg. 3 des  e-Index. M.a.W.: ix hat hier keine Wirkung, sondern nur für die Nutzung. 
Was man aber nicht machen kann: z.B. den Button 3 dem Register 5 einer anderen Indexdatei zuordnen. 
 
Die manchmal so wichtige Umcodierung der Nutzereingabe passiert in jedem Fall z.B. bei der Sprungmarke 
#-3, wenn ein Register 3 benutzt wird - egal welche Indexdatei es ist. 
Allerdings gibt es eine neue Sondervariable #ax, in der der Buchstabe der aktuellen Indexdatei steht und an zweiter Stelle die Nummer des aktuellen Registers, also z.B. d4 oder e1. Damit hat man alle Möglichkeiten, die Nutzereingabe entsprechend zu behandeln. 

5a. a99 / alcarta
Mit dem FLEX-Befehl  index sym abc  kann man den bei abc beginnenden Abschnitt des Registers sym anzeigen lassen, das gilt auch für die neuen Indexdateien, sobald man deren Registern symbolische Namen gegeben hat (wie in  3 gezeigt.) 
Mit index |3 abc erhält man aber das Register 3 der Datei cat.aex, wenn man die oben gezeigte ix-Zeile angelegt hat. Dasselbe gilt für den Befehl qrix. Mit 
index ~zi abc          bzw.        qrix ~zi abc  
kann man gezielt jedes einzelne Register i in jeder Indexdatei z ansprechen. 

5b. a99, acon (also auch in Web-Katalogen) 
In beiden Programmen kann man mit find und qrix auf alle realen und symbolischen Register zugreifen. 
Beide erzeugen beim Schreiben die korrekten Einträge in den richtigen Registerdateien bzw. löschen Einträge, wo es nötig ist. 
Wenn man PHPAC als Web-Schnittstelle einsetzt, muß an den Skripten und Parametern nichts geändert werden, falls man zusätzliche Indexdateien anlegt. 

6. PRESTO, APAC und UPDATE
Die DOS-Programme PRESTO und UPDATE werden gleichfalls mit den zusätzlichen Indexdateien fertig, d.h. PRESTO kann sie anzeigen und beide können die nötigen Veränderungen beim Speichern darin vornehmen. Wer will, kann also auch eine V27.2-Datenbank noch mit PRESTO benutzen - natürlich nur mit einer Ausführung ab V27.2. 
Das Umschalten in PRESTO geht so: Im Registerbildschirm z.B.   ~e4 Enter  eingeben, um in die Indexdatei  cat.aex  zu schalten. Es erscheint deren Register 4, und zwar an der entsprechenden Stelle. Hat man eine ix-Zeile, wie oben in 4. gezeigt, wird auch in PRESTO und APAC mit Alt+3 bzw. Alt+5 auf die Register des Index e umgeschaltet. 
Ganz so komfortabel wie in a99 ist dies nicht, da man im Bedarfsfall um die Existenz der zusätzlichen Indexdateien und ihrer Register wissen muß - PRESTO kennt weiterhin keine symbolischen Register. Jedoch wird man kaum weiterhin alle Arbeiten nur mit PRESTO machen wollen... 

7. Wichtige Hinweise 
Die sekundären Indexdateien sind nicht in jeder Hinsicht dem Hauptindex gleichwertig: 
1. Die Primär-, Löschkontroll- und SR-Schlüssel müssen alle im Hauptindex liegen 
2. Das Nachladen beim Export und die V14-Ersetzungen können nur aus dem Hauptindex erfolgen 
3. Die Präfixtechnik ermöglicht schon lange, daß man dem Nutzer weit mehr als 10 symbolische Register anbieten kann! Hier liegt also kein Grund, eine zusätzliche Indexdatei anzulegen. Auch in der zusätzlichen Indexdatei kann man jedoch Präfixe verwenden! 

Mögliche Vorteile
•	Zu empfehlen ist, eine zusätzliche Indexdatei hauptsächlich als Entlastung des Hauptindex zu verstehen, damit dieser die 2GB nicht überschreitet. 
•	Bequem ist ein zusätzlicher Index auch dann, wenn er nur temporär gebraucht wird. Irgendwann löscht man den Zusatzindex und den/die ak-Befehle sowie den ix-Befehl in den Indexparametern - fertig. 
•	Günstig kann es auch sein, wenn man möglicherweise öfter zu erneuernde Register in einen Zusatzindex legt. Diesen kann man selektiv erneuern, siehe 2., was bei großen Sub-Giga-Datenbanken schon ein Zeitvorteil sein kann. 
•	Der Zusatzindex kann außerdem dazu dienen, dienstliche Register anzulegen, die ein Nutzer auf keinen Fall sehen soll (falls man fürchtet, das Register 11 des Primärindex zu überfrachten). Auch in diesem Fall wird man wohl kaum mehr als eine zusätzliche Indexdatei anlegen müssen. Je mehr Indexdateien, das ist klar, umso langsamer ist das Speichern neuer Sätze! 
Sonstige echte Vorteile gibt es nicht. 

Anhang : Die zwei häufigsten Szenarien
... und die wenigen Handgriffe, die dazu nötig sind 
Die unten gezeigten INDEX-Aufrufe kann man normalerweise automatisch erledigen lassen: Der Menüpunkt 
``Index erneuern`` 
`auf dem ORG-Menü wurde dafür erweitert! Es kommt ein Zwischenmenü mit der Auswahl, ob man eine Gesamt-Neuindexierung möchte (die bisherige Funktion) oder gezielt die Erstellung einer der zusätzlichen Indexdateien, 

Szenario 1. Einzelne Register auslagern
Beispiel: Man will das Reg. 3 (Stich- und Schlagwörter) des Standardsystems in eine Indexdatei cat.aex auslagern. 
•	In die Indexparameter diese Zeile einfügen: 
	ix=ddedddddddd
•	Das symbolische Register TIT so ändern: 
	I TIT e3 "Titelwörter, Schlagwörter"    [also e3 statt 3 ]
•	An den Stellen, wo bisher |3 steht, dafür ~e3 einsetzen, außer in der Überschriftszeile, die mit |3= beginnt. 
Ist das geschehen, Index erneuern. Anschließend hat man einen kleineren CAT.ADX und einen neuen CAT.AEX. Ansonsten ist nichts zu ändern, weder in in Parametern noch z.B. in FLEXen. 
Wenn die Datenbank sehr groß ist, kann es schneller gehen, keine Index-Gesamterneuerung zu machen, sondern 
1. Selektiv den Index cat.aex zu erstellen: 
	index -fi0 -Ze -@2 -n0 -m0 -ka -d*DEMO2\CAT_* -eCAT/c:\ALLEGRO\DEMO2 
2. ... und dann das Register 3 aus dem Index cat.adx zu entfernen: 
   	qrix -fc -W3 -dDEMO2 -eCAT/c:\ALLEGRO\DEMO2 

Szenario 2. Ein ganz neues Register schaffen und in eine Indexdatei cat.axx packen
Das neue Register soll Wortfragmente der Titelwörter enthalten. Anders gesagt: ein Linkstrunkierungs-Index. So könnte das aussehen: 

ak=20"[ -]"+ô     #20 bei Spatium und - auseinandernehmen 
... 
#-ô 
#u1 y2 =u9 e0 
#-ò 
!uu9 y0 u>> p{ 8 "~x1" } 
#uu9 +ò y0 b1 =u9   Schleife: immer vorn ein Zeichen wegnehmen 
#+# 
Hier ist angenommen, daß man eine `zweite Stoppwortliste` eingebaut hat, die mit u>> geprüft wird. Eintragung im Register 1 der zusätzlichen Indexdatei  cat.axx  erfolgt dann nur, wenn das Wort nicht in jener Liste steht. (Der Code 8 wird hier gebraucht, wie auch sonst, um die in der Schleife entstehenden Einträge voneinander zu trennen.) 
Außerdem wird nur noch eine weitere Zeile gebraucht: 

I WFR x1 "Wortfragmente der Titelwörter" 

Anschließend braucht man den Index cat.adx nicht zu erneuern, sondern nur den neuen zu erstellen - das geht schneller. Man macht das mit diesem Befehl: 

INDEX -fi0 -@2 -Ze -ka -d*c:\ALLEGRO\demo2\cat_* -ecat/c:\ALLEGRO\demo2 

In PRESTO kann man dieses Register dann nur erreichen, wenn man im Indexfenster  ~x1  eingibt. 
In a99 erscheint WFR in der Liste der symbolischen Register (Auswahlliste oben im Indexfenster). 

Tip: Auf der Seite "Datenbank-Information" sieht man unten die Liste der symbolischen Register. Dort erkennt man auch, welche zusätzlichen Indexdateien in den Parametern eingerichtet sind. Wenn da z,B. diese Zeile steht: 
PHR f1=Phrasen
dann weiß man: Es ist eine zusätzliche Indexdatei cat.afx definiert. 

2005-05-25 / 2007-03-28 

?zweite Stoppwortliste=h ac10-3#294 
?V26.6=h vb193 
?Ende dieses Textes=h =Anhang 
?Index erneuern=X inxprod