genau, und damit das Datenmaterial in der Menge beherrschbar bleibt auch komplett ohne
XML, da wäre für das gleich Material statt 60GB mindestens 500GB in der Datenbank ohne für mich erkennbare Vorteile, aber mit deutlich langsamerer Reaktionszeit, weil der Zugriff über 500GB physikalisch nun mal langsamer ist als über 60GB.
Noch ein Tip: mach für jede Variante der Verdichtung eine eigene Tabelle und die Echtdaten in eine andere Tabelle. Wenn du zum Beispiel über ein indiziertes Feld der Haupttabelle bereits einschränken kannst, dann ist es oft performanter, die jeweiligen zusatztabellen erst dann für die noch überig gebliebenen Datensätzen einzubinden, wenn man die auch braucht. Das geht über Stored procs relativ simpel oder super dynamisch mit gleicher Syntax als Block.
sinngemäß
SQL-Code:
for select id,bla from hauptdatenmenge where .... into :idmain
do
begin
select count(*) from verdichtung2 where id=:idmain and txt containing '#ABC#' and txt containing '#123#' into :cnt; --sind beide worte enthalten?
if cnt=1 then select count(*) from verdichtung1 where id=:idmain and txt not containing '#ABC#123#' into :cnt; --dürfen aber nicht hintereinander stehen
if cnt=1 then suspend;
end
der ganze innere teil kann dann dynamisch zusammengebaut werden für alle Kriterien, die dein User haben will. Wir haben das mal mit google syntax gebaut, ist ziemlich simpel und dem User angenehm einfach zu erklären. Lässt sich später auch gut skalieren, in dem man die Daten zum Beispiel auf mehrere Server oder Serverinstanzen verteilt und man die Abfragen einfach in eine Tabelle stellt und serverbasierende Dienste die Antworten dazu in die Datenbank schreiben. Ist bei der Datenmenge von Google sicherlich nicht ganz so schnell wie die, hat aber den vorteil, das auch die aktuellsten Einträge immer im Index sind, das kann google nämlich nicht (wir haben sowas auch schon speicherbasierend aufgebaut, aber da braucht man schon einen Server mit diversen Gigabyte
RAM und diversen CPU Kernen, damit das deutlich schneller ist, aber machbar ist alles, und sogar mit Delphi
Win32, Bei erreichen von 2GB splittet man einfach über mehrere Serviceprozesse).
[edit=mkinzler]SQL-Tag eingefügt Mfg, mkinzler[/edit]