Hi Rolf
Allgemein würde ich auch sonst Datenbankliteratur empfehlen, auch zum Thema Joins.
Da hast du sicher recht.
Ich würde dir echt wenigstens die Normalformen empfehlen, auch wenn du eher Dateien magst zeigen sie dir mögliche Probleme auf.
Sicher aber im Verhältnis zum quadratischen Speicheraufwand einiger zig Megabytes der Matrixwerte selbst eher zweitrangig, oder?
Trotzdem trägt es dazu bei, das auch da die Hardware aufgerüstet werden müsste.
Das spräche dann aber gegen eine Lösung die so hohe Hardwareerfordernisse hat wie deine, da ansonsten die Platten künftig nicht schnell genug mitwachsen, oder?
Aktuell bräuchte die Datenbank 8GB, nochmal etwa soviel wäre temporär für den Sortiervorgang nötig. Ich denke nicht, dass das hohe Anforderungen sind. Ram ist da wesentlich teurer und gibt es auch nicht in solchen Mengen. Zumal dein Lösungsansatz ja zusätzlich auch noch massig HD verbrauchen würde·
Du hinterlegst die ersten 500 bytes jedes Postings in der DB?
Das sind unkomprimiert 300MB Daten, lohnt sich das?
Imho ja. Dadurch verhindert man, eine Datei öffnen zu müssen und an die entsprechende Stelle springen zu müssen. Beides ist sehr teuer.
Eine Hash-Funktion (von en. "to hash": zerhacken, dt. Bezeichnung: Streuwertfunktion) ist eine nicht umkehrbare Funktion (ein Algorithmus), die eine umfangreiche Quellmenge (i.d.R. Texte) auf eine wesentlich kleinere Zielmenge (Hash-Werte, i.d.R. natürliche Zahlen und Buchstaben) abbildet."
Nicht jede Hash-Funktion ist für eine Hashtable nutzbar.
lower() bildet die umfangreichere Menge der Wörter aus [a-zA-Z] auf Wörter aus [a-z] ab. Kollisionen entstünden z.B. bei den Wörtern "Sein" und "sein", und würden in unserem Fall im 2.Schritt aufgelöst.
Das ist nach wie vor keine Hashfunktion wie sie bei einer Hashtabelle irgendwie brauchbar wäre...
Nein, du meinst wenn man "Javascript" sucht greift man auf das File "Javascript" zu. Das wäre eine Selbstlüge weil man die Suche nach der Datei "Javascript" auf das Betriebssystem/Festplattencontroller abwälzt. Die Hashtabelle liefert stattdesen direkt das Handle der Datei.
Autsch, du willst die Datei also dauerhaft geöffnet halten?
Man nimmt offenes Hashing wie in http://de.wikipedia.org/wiki/Hash-Funktion#Offenes_Hashing definiert, d.h. als Hashwert wird eine Datenstruktur möglicher Schlüssel abgelegt. Diese Datenstruktur kann sowohl Schlüssel/Werte Paare enthalten als auch die Referenz auf eine Datei mit weiteren ausgelagerten Schlüssel/Werte Paaren.
Viel Spass, ich hab dir ja vorgerechnet, wie gross das dann wird...
Ein Werte ist dabei eine Liste von Referenzen auf Postings, wird nach mehreren Schlüsselwörtern gesucht, duchsucht man im 2.Schritt nur die Schnittmenge dieser Listen.
Die zu bilden ist übrigens auch sehr witzig...
PS: Weißt du mit welchem Aufwand eine Teilwortsuche in der DB läuft?
Kommt drauf an ob der Anfang oder das Ende fehlt. Wenn der Anfang fehlt wird der Aufwand ohne weitere Massnahmen linear. Allerdings benutzt die neue Suche Massnahmen die das verhindern. Da läuft es dann einmal logarithmisch um alle möglichen Ganzwörter zu finden, dann nochmal logarithmisch pro möglichem Ganzwort um an die Postings zu kommen.
Gruss Daniela