Trick 59:
Superschnelles Einspeisen   (großer Mengen neuer Daten)
 
Aufgabe:
Schnellstmöglich 20.000 oder mehr Datensätze einbringen.
            
Warum: Es kommt vor, daß man
ohne spürbare Beeinträchtigung des 
      
laufenden Betriebs ganz schnell eine größere Menge neuer
Daten
      
verfügbar machen will. 
Lösung:
Falls es genügt, die neuen
Daten zunächst über einen oder zwei ganz 
wichtige Schlüssel finden zu
können, dann läßt sich etwas machen.
Eine Index-Erneuerung irgendwann
später muß dann aber den Index
vervollständigen.
Vorliegen müssen die Daten
zuerst einmal als Grunddatei (Typ .ALG)
oder Externdatei (Typ .ADT). 
Dann kommen zwei Tricks zur
Anwendung:
1. Es wird eine abgemagerte
Indexparameterdatei automatisch erstellt,
   die nur die ersten
zwei ak-Befehle enthält. Diese wird dann statt
   der normalen geladen,
so daß dann neu zu speichernde Daten viel
   schneller indexiert
werden können - die Anzahl der Schlüssel ist 
   nämlich der
Haupt-Zeitfaktor beim Abspeichern.
2. Das Einlesen geschieht
zunächst ohne Speichern mit dem z-Wert 0
   beim update-Befehl,
dann gelangen die Sätze nur in den Offline-
   speicher. Danach wird
mit "save off" gespeichert. Das geht schneller
   als update mit z-Wert
1, denn dabei wartet das Programm jeweils
   0.5 Sekunden zwischen
zwei Sätzen.
Als Vorbereitung kann man in den
Indexparametern die ersten zwei
ak-Befehle so präparieren,
daß damit die entscheidenden Schlüssel
erzeugt werden. In cat.api
könnte man etwa direkt unter die Zeile
ak=zz+@
diese neue Zeile einsetzen:
ak=20+G
dann würde der Titelanfang als
zweiter der beiden Schlüssel produziert,
der erste wäre der
Primärschlüssel (IdNummer in #00).
An drei Stellen, mit *** markiert,
muß man eingreifen, bevor man den
FLEX einsetzt:
***1 Sollen es drei oder mehr
Schlüssel sein? Bei  z>2  Zahl einsetzen!
        
Vielleicht sogar nur 1, vielleicht auch 5.
***2 Den korrekten Dateinamen statt
<xyz> einsetzen.
***3 Die Nummer der Datei
einsetzen, in welche die neuen Daten sollen
So sieht der FLEX aus, der beide
Tricks realisiert:
 
----------------------------------------------------------------
 
Vorbereitung: Prüfen, ob neue oder bearb. Saetze im
Offline-Speicher
find new
if g0 mes Es
gibt noch ungespeicherte neue Saetze, zuerst speichern!;end
find edit
if g0 mes Es
gibt noch ungespeicherte bearbeitete Daten, zuerst speichern!;end
  Wenn
nicht, dann Offline-Speicher leeren
erase off
  1.
Indexparameter abspecken: nur die ersten 2 ak-Zeilen
    
alles andere bleibt drin.
var D B "."
K1 "pi"
open
if no mes
Kann die Indexparameter nicht finden!;end
 
Abgespeckte Datei soll mager.api heissen und auf DbDir liegen
var D
"mager." K1 "pi"
open x
z=0
:loop
get
if cancel
jump lend
 
Kommentare und leere Zeilen weglassen
if " " jump
loop
if "" jump
loop
 
ak-Zeile gefunden: zaehlen, bei 3 abbrechen  ***1
if "ak="
z+1;if z>2 jump loop
write
write n
jump loop
:lend
close
close x
  Magere
Index-Param.datei ist fertig
  Diese
jetzt laden
var "mager"
index p 
  2.
Update
    
Einstellung: alle Saetze nehmen, aber nicht sofort speichern
set u010
 
Dateinummer für die neuen Daten (Nummer von 1 bis 255)  ***3
input 129
  Datei
<xyz> einspeisen. Statt <xyz> den echten Namen einsetzen!
***2
update
<xyz>
  Daten
jetzt im Offline-Speicher
  Fragen
ob Speichern gewuenscht
yesno
Speichern?
if yes save
offline
if no var
"Speicherung dann auf Wunsch mit 'x save off'" n "Oder Abbruch mit 'x
erase off'";mes
sho off
  Jetzt
sind die Sätze gespeichert und "mager" indexiert
  Die
normalen, fetten Indexparameter wieder laden
var B 
index p
 
Dateinummer zurücksetzen  ***3
input 1