Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Indexierung meiner DB (https://www.delphipraxis.net/85320-indexierung-meiner-db.html)

Gruber_Hans_12345 29. Jan 2007 11:03

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBX/FIBPlus

Indexierung meiner DB
 
Hallo

Ich spiele mit dem Gedanken, in meiner Datenbank, eine suche zu integrieren, die per Index funktioniert.

Also alle Objekte der DB, in denen gesucht werden soll, werden einmal in einen Index geladen, und dort kann dann schnell gesucht werden, ohne einzeln die zig tabellen abzugrasen ....

wie baue ich am besten die tabelle auf, die den index dann enthalten soll?
bekommt man wo schon vernünftige algorithmen her, die zb eine reine Textdatei indexieren?

gibt es wo gute und brauchbare dokumentation dazu (index und suche findet man zwar viel per google und co, aber was brauchbares? )
oder gibt es vernünftige Komponenten für Delphi?

mkinzler 29. Jan 2007 11:08

Re: Indexierung meiner DB
 
Also Indeices kann die Datenbank von allein, wenn man die Felder derart deklariert. Was du meinst ist wohl ein Volltextindex.
Um wieviele Datensätze Reden wir?

Gruber_Hans_12345 29. Jan 2007 11:20

Re: Indexierung meiner DB
 
ja, meinen einen volltextindex
und auch so, das ich im endeffekt nur in einer tabelle suchen muß um rauszubekommen, welche objekte angezeigt werden sollen.

10 Tabellen mit 10000 Datensätzen
10 Tabellen mit 5000 Datensätzen
1 Tabelle mit 200000 Datensätzen
2 Tabellen mit 1000 Datensätzen
2 Tabellen mit 2000 Datensätzen
1 Tabelle mit 50000 Datensätzen

sind mal die wichtigsten .... der rest ist dann noch etwas kleinkram

mkinzler 29. Jan 2007 11:35

Re: Indexierung meiner DB
 
Da würde ich mal Testen ob ein extra Index sich lohnt (sind ja je nach implementierung auch mehrere Tabellen).
Ich würde das in einer SP lösen, welche dann sämtliche Tabellen durchsucht.

MagicAndre1981 29. Jan 2007 11:42

Re: Indexierung meiner DB
 
Ein Index macht bei Suchen nach Strings oder Memos Sinn, aber du musst bedenken, dass ein Index beim Lesen vorteile bringt, aber dass es beim Schreiben etwas länger dauert.

Gruber_Hans_12345 29. Jan 2007 11:43

Re: Indexierung meiner DB
 
das ist leider auch nicht ganz so einfach ... wie bringe ich dem FB1.5 (oder 2.0 egal dann) bei wie er RTF Dokumente und sonstige eigene Dokumente indizieren soll?

Wenn ich selber indiziere ist es ja dann kein problem meine eigenen Objekte zu indizieren.

Das nächste ist dann, bei der Tabelle mit 50000 datensätzen handelt es sich um externe Files, also, da wird nur der Filelink in der DB gespeichert, und die daten selbst werden dann in einem zentralen FileStorage gespeichert.

@MagicAndre
das ist mir klar, würde ja dann nur in zeitintervallen neu indizieren (so jede stunde oder so) jedes objekt in der db hat ja ein Änderungsdatum dabei, anhand dessen erkenne ich dann ja ob sich was geändert hat oder nicht

mkinzler 29. Jan 2007 11:47

Re: Indexierung meiner DB
 
Zitat:

as ist leider auch nicht ganz so einfach ... wie bringe ich dem FB1.5 (oder 2.0 egal dann) bei wie er RTF Dokumente und sonstige eigene Dokumente indizieren soll?
Ja, das ist ja was anderes.
Ich habe hier ein interne Anwendung (webbasiert), bei der die Dokumente sich in der Datenbank befinden, dort geht die Suche auch ohne speziellen Index, recht schnell.
Soll der Index lernfähig sein?

Gruber_Hans_12345 29. Jan 2007 12:07

Re: Indexierung meiner DB
 
Zitat:

Zitat von mkinzler
Zitat:

as ist leider auch nicht ganz so einfach ... wie bringe ich dem FB1.5 (oder 2.0 egal dann) bei wie er RTF Dokumente und sonstige eigene Dokumente indizieren soll?
Ja, das ist ja was anderes.
Ich habe hier ein interne Anwendung (webbasiert), bei der die Dokumente sich in der Datenbank befinden, dort geht die Suche auch ohne speziellen Index, recht schnell.
Soll der Index lernfähig sein?

lernfähig? ja natürlich hört sich gut an :)

was bedeutet lernfähig? (mir geht hier leider noch etwas hintergrundwissen ab)

ich gehe von folgender arbeitsweise aus
  • Indizieren einer Datei
    • Die Datei wird wort für wort durchgegangen (pro Dateiendung gibt es unterschiedliche Trennzeichen)
    • ungünstige wörter werden gleich gelöscht (wörter < 2 zeichen) wörter mit nur Sonderzeichen oder nur zahlen
    • das ganze wird in Tabellen gespeichert (einmal die Wörter und dann die Verlinkung)
    • eventuell noch in der Linktabelle gespeichert, wie oft das Wort vorkommt?
  • suchen
    • gesucht wird in der INDEX_WORD Tabelle was dort gefunden wird, wird anschließen in der INDEX_INDEX Tabelle gesucht

SQL-Code:
INDEX_WORD (
  ID INTEGER NOT NULL,
  WORD VARCHAR(20)         // Hier nen Index drauf
)
SQL-Code:
INDEX_INDEX (
  WORD_ID INTEGER NOT NULL, // Verknüpfung zur INDEX_WORD Tabelle
  OBJEKT_TYP INTEGER,      // Welche Tabelle das ist
  OBJEKT_ID INTEGER,       // eindeutiger Index des Datensatzes in der Tabelle
  STATUS INTEGER,          // eventuell ein Status, wo das Wort vorgekommen ist (Kommentar oder Text oder ....)

mkinzler 29. Jan 2007 12:15

Re: Indexierung meiner DB
 
Zitat:

was bedeutet lernfähig? (mir geht hier leider noch etwas hintergrundwissen ab)
Draunter meine ich, das die Wortliste dynamisch erzeugt wird.
Dann Ansatz stimmt ansonsten. Ich würde noch eine Negativliste führen (Wörter die nicht betrachtet werden, z.B. der, die, das, und, ...)

Gruber_Hans_12345 29. Jan 2007 13:07

Re: Indexierung meiner DB
 
ok, das mit der negativliste ist ne gute idee.

gibt es irgendwo codeschnippel oder komponenten, die einem einen teil der arbeit abnehmen? (oder muß man das rad in diesem fall neu erfinden?)
oder weiterführende dokumentation, damit man nicht irgendwelche grundlegende fehler macht


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz