Eure Erfahrung mit Projekten mit mehr als 5 Mio Datensätzen
mario_lorenz
- datenbank
0 Claudia0 stareagle0 Andi0 Daniel Thoma0 Klaus
Guten Tag,
ich stoße gerade mit einem aktuellem Projekt an meine bisherigen Grenzen des Möglichen (Servertechnik, Geschwindigkeit, Handling).
In dem Projekt geht es um 5 Mio Datensätze die u.a. auch im Volltext durchsucht werden sollen.
Ich habe die Daten in eine normale MySQL(MyISAM)-Tabelle einlaufen lassen. Hier musste ich schon die Daten auf zwei Tabellen verteilen, da die Größe einer Tabelle bereits das MyISAM-Limit von 4GB überschritten hat. Ich kann zwar die Tabellen über eine MySQL-Merge-Tabelle miteinander verbinden, verliere aber dadurch die Volltext-Suchmöglichkeit in der Merge-Tabelle. Eine Suche über LIKE via Merge-Tabelle benötigt inakzeptable 5 Minuten und mehr.
Für die Volltextsuche wird eine VARCHAR(240) und ein TEXT-Spalte mit durchschnittlich 4.000 Zeichen durchsucht werden.
Bei InnoDB-Tabellen habe ich zwar kein 4GB-Limit, aber auch kein Volltextindex. Die Performance soll lt. einschlägigen Foren auch um das ca. 2,5 fache langsamer sein als bei MyISAM-Tabellen.
Ich werde die Suchanfragen auf jeden Fall cachen müssen und dadurch einen zweiten Daten-Pool erzeugen, der kleiner ist, und auf die richtigen Einträge verweist. Somit wären Dubletten-Anfragen auf jeden Fall schneller beantwortet.
Wer hat bei diesem Thema schon Erfahrungen gesammelt und könnte kurz skizzieren, wie die Rohdaten in Tabellen verteilt und mit Indizes versehen sein müssten, um eine akzeptable Volltextsuche zu ermöglichen. Oder hat jemand schon mit Cachesystemen die bei solchen Datenmengen zum Einsatz kommen müssten, gearbeitet?
Ist evtl. die Kombi MySQL, Apache, PHP nicht die erste Wahl?
Vielen Dank für Eure Hilfe,
Mario Lorenz
PS: MySQL 5.0, PHP 5.2.6, Apache 1.3.34
Hallo Mario
Bei den Datenmengen hast Du sicherlich einen eigenen Server, sodass Du eventuell auf andere Suchmaschinen zurueckgreifen kannst. Hier die beiden, die ich kenne, es gibt aber sicherlich noch mehr:
Sphinx
und
Lucene
Ich habe aber bisher nur damit rumgespielt, kann Dir also zur Performance und zur Zuverlaessigkeit nichts sagen.
Viel Erfolg
Claudia
Hallo Claudia,
vielen Dank für den Tipp. Beides hört sich sehr viel versprechend an. Ist auch eigentlich logisch, eine eigene Suchmaschine aufzusetzen.
Vielleicht hat ja im Forum schon jemand mit diesen beiden Systemen Erfahrungen gesammelt?
Grüße,
Mario Lorenz
Hai Mario,
Vielleicht hat ja im Forum schon jemand mit diesen beiden Systemen Erfahrungen gesammelt?
Sieht leider nicht wirklich danach aus. Schau mal hier im Archiv:
Archiv Lucene
Archiv Sphinx
MfG,
Sympatisant
Hallo,
Ist evtl. die Kombi MySQL, Apache, PHP nicht die erste Wahl?
Ich habe zwar noch keine Erfahrung mit so großen Datenmengen, aber möglicherweise sollte man mal andere Datenbanken evaluieren z.B. Postgres oder Firebird, wenn es auch Geld kosten darf eventuell auch Oracle (ich denke bei der Datenmenge sollte man sich das schon überlegen).
Insbesondere, dass du die Daten bereits auf zwei Tabellen verteilen musstest, spricht imho dafür. Möglicherweise sind auch Dinge wie Clustering interessant.
Gruß
Stareagle
Guten Tag,
ich stoße gerade mit einem aktuellem Projekt an meine bisherigen Grenzen des Möglichen (Servertechnik, Geschwindigkeit, Handling).
In dem Projekt geht es um 5 Mio Datensätze die u.a. auch im Volltext durchsucht werden sollen.
Ich habe die Daten in eine normale MySQL(MyISAM)-Tabelle einlaufen lassen. Hier musste ich schon die Daten auf zwei Tabellen verteilen, da die Größe einer Tabelle bereits das MyISAM-Limit von 4GB überschritten hat.
Hallo !
Vielleicht würde eine Suchserver-Maschine von Google helfen ? Ich habe mir mal früher das Datenblatt von ihr angesehen, und so ein Teil wäre schon recht "heiss", wenn man es privat gebrauchen dürfte ! Allerdings hat dieses Teil schon seinen Preis, und 5 Mio Datensätze sind auch nicht ein kleiner Happen !
(Allerdings kenne ich von einer Druckfirma in etwa die Grössendimension von 1 Mio Datensätzen, wenn es nämlich um den Personalisierungsdruck bei Couverts geht, und dort kommt man als Firma ohne eigenen Webserver- und Backupsysteme gar nicht mehr aus. Das heisst, ich habe mal so einen vollgestopften und klimatisierten Server-Raum gesehen, und wenn eine Datenbank gerade in der Produktion für die Adressierung ist, kann man natürlich als Kunde nicht mehr auf sie zugreifen, also arbeitet man vermutlich mit 2 Datenbanken, die jeweils zur Produktion, und zur Aktualisierung eingesetzt werden. Möglicherweise werden dann einfach die Couverts wieder nachgedruckt, die falsch adressiert wurden, oder die noch fehlen.)
Andererseits finde ich die Idee nicht schlecht, schon einmal gemachte Suchanfragen temporär zu hinterlegen, oder in Sammelanfragen zu sammeln : Damit vermeidet man Traffic und unnötige Rechen- und Festplattenbewegungszeit.
Ich denke, dass irgendwann eine bestimmte Grösse von einer DB erreicht ist, ansonsten wird die Arbeit mit ihr träge : Zu lange Ladezeiten, Fehleranfälligkeiten, Backup- und Portierfähigkeit, usw. (Z.B. kenne ich Firmen, die haben eine direkte Leitung oder einen FTP-Zugriff, um Daten auszutauschen, da schon CD's oder Emails einfach zu kleine Datenmengen befördern können. In den USA wird sicher auch Glasfaserkabel eingesetzt).
Ich würde mal mit dem Chef oder im Team besprechen, ob man das Webprojekt nicht splitten könnte, oder sich eine obere Grenze für DB's nicht eher in Frage kommt. Denn die Risiken für Ausfälle und Kosten summieren sich auch. Das Clustering ist eine gute Idee : Apple arbeitet z.B. zurzeit an einer neuen Programmiertechnik oder Maschinensprache, um mehr Parallelprozessoren anzusprechen oder auszulasten.
Und mit der Gridfunktion usw. lassen sich auch Rechenarbeiten per Privatcomputer von Apple verteilen (allerdings muss man sich da irgendwie noch Rechte sichern, und Programmierkenntnisse anreichern, da solche Arbeiten bisher nur fürs SETI Projekt, usw. verwendet wurden.)
Ansonsten wäre eben wie gesagt die Google-Maschine nicht schlecht, um Datenbanken oder HTML-Seiten zu durchsuchen. Wie das im Detail funktioniert, weiss ich nicht. Aber für grosse Datenmengen wäre Google sicher eine gute Anlaufstelle ! Also mal da anfragen.
Wichtig in diesem Zusammenhang mit der 4 GB Grenze ist auch die Filegrenze der Betriebssysteme zu beachten : Nur Sun-Filesysteme erlauben derzeit ein absolutes Maximum für eine Dateigrösse, die fern der 1000 GB-Grenze liegt (oder liegen soll, da noch in Entwicklung).
Ansonsten kann MS mit FAT32 nur 4 GB ansteuern, und erst neuere Filesysteme können diese Grenze überschreiten...
Wie gesagt, eine Unix-Plattform käme aber so oder so eher in Frage ! ;)
MFG Andi
----------
Link
Google Mini gibt es jetzt in mehreren Versionen. Der Preis der günstigsten Mini, die bis zu 50.000 Dokumente durchsucht, liegt einschließlich der gesamten Hardware, Software und einem Jahr Support bei 2.990 Euro. Andere Versionen ermöglichen die Suche in bis zu 100.000, 200.000 oder 300.000 Dokumenten. Da Aktualisierungen jederzeit mühelos durchgeführt werden können, ist Google Mini die perfekte Lösung für wachsende Unternehmen.
Film anschauen zu Produkt : Link
Über 220 Formate kann "Google Mini" indizieren und durchsuchen :
Link
DBASE dbf DataEase dba, dbm, dql dB Etc.
Wie kann ich meine Dateifreigaben oder Datenbanken webfähig machen?
Dateifreigaben oder Datenbanken für das Web zu aktivieren ist in der Regel problemlos möglich. Damit Google Mini Content in Dateifreigaben und Content Management-Systemen crawlen kann, können Administratoren diesen Content webfähig machen. Die einfachste Methode, eine Dateifreigabe webfähig zu machen, besteht in der Installation von Microsoft IIS oder Apache Web Server auf dem Server, auf dem sich der Content befindet. Die meisten Content Management-Systeme bieten die Option zum Anzeigen von Content in einem Webformat.
Quelle : Link
Weitere FAQ's : Link
Kann Google Mini Content von Datenbanken direkt indizieren?
Google Mini kann Datenbanken nicht direkt crawlen. Sie können jedoch Datenbank-Content für Google Mini verfügbar machen, indem Sie die Datenbank webfähig machen. Falls für Sie die direkte Indizierung von Datenbanken eine erforderliche Funktion ist, empfehlen wir Ihnen den Einsatz der Google Search Appliance, in der diese Funktion integriert ist.
Sie können Ihre Datenbank webfähig machen, indem Sie zwei dynamische Seiten oder Vorlagen erstellen (in einer beliebigen Webprogrammiersprache Ihrer Wahl), damit der Datenbank-Content über HTTP angezeigt werden kann. Auf der ersten Seite müssen auf Basis einer an die URL-Zeichenfolge übergebenen eindeutigen ID alle Details des jeweiligen Datensatzes angezeigt werden. Diese Detailseite generiert anhand der eindeutigen ID eine SQL-Abfrage, mit der die Details des Datensatzes für die Anzeige abgerufen werden. Es ist die Seite, die die Nutzer sehen, wenn sie in den Suchergebnissen auf diese Seite klicken.
Die zweite Seite muss eine vollständige Liste der Hypertext-Links jedes Datensatzes, der in den Index aufgenommen werden soll, enthalten. Diese Masterseite generiert eine SQL-Abfrage, mit der die eindeutigen IDs aller Datensätze abgerufen werden. Aus der eindeutigen ID wird jeweils eine URL konstruiert, die auf eine Instanz der ersten Seite verweist. Nachdem Sie diese Vorbereitungen abgeschlossen haben, verweisen Sie Google Mini auf die Masterseite. Nun werden alle Datensätze indiziert, die Sie offen gelegt haben.
Quelle : Link
Durchsucht Google Mini dynamisch generierten Content?
Ja. Google Mini crawlt und durchsucht problemlos dynamische Webseiten und erkennt und verwaltet automatisch dynamische Sitzungs-IDs, die in vielen Personalisierungs- und J2EE-Architekturen vorkommen.
Hallo mario_lorenz,
Ich habe die Daten in eine normale MySQL(MyISAM)-Tabelle einlaufen lassen. Hier musste ich schon die Daten auf zwei Tabellen verteilen, da die Größe einer Tabelle bereits das MyISAM-Limit von 4GB überschritten hat.
Bist Du sicher, dass das eine Einschränkung von MyISAM ist? In der Doku steht nämlich nichts in dieser Richtung.
Könnte es sein, dass die Datenbank einfach auf einer Fat32-Pratition liegt o.ä. und eine Datei zu groß wird?
Grüße
Daniel
Hi Daniel,
richtig, das ist keine Einschränkung von MyISAM, sondern eine default-Einstellung. Die Beschränkungen kommen wenn dann nur durch das BS und die verwendeten Partitionen. siehe
The table is full
Grüße,
Mario Lorenz
Ist evtl. die Kombi MySQL, Apache, PHP nicht die erste Wahl?
PostgreSQL (wie MySQL auch kostenlos) machte auf mich einen ganz guten Eindruck. Wurde testweise im Projekt eingesetzt, nie produktiv (Kunde wünschte sich statt dessen lieber eine "Bezahldatenbank"...). Aktuell eingesetzt wird MS SQL Server, aber der wird in Kürze durch Oracle abgelöst. SQL Server ist vergleichsweise teuer (damit SQL Server mehr RAM nutzen kann, muss auch eine "große" Windows-Server-Version eingesetzt werden...und das geht bei meheren Maschinen ziemlich ins Geld. Oracle dagegen läuft auch unter Linux), ist in vielen Fällen hinsichtlich der Performance suboptimal und läuft inzwischen auch ziemlich instabil. Die Datenbank enthält allerdings auch ein Vielfaches der von Dir gewünschten 5 Mio. Zeilen.
Für eine Volltextsuche macht natürlich ein Volltextindex Sinn. Wenn die Datenbank das von sich aus nicht unterstützt, kann man selber eine entsprechende Suchengine anklemmen. Lucene fällt mir da beispielweise ein. Dieser Ansatz hat auch den Vorteil, dass man (zumindest bei Quelloffenen Suchengines) die Indizierung oder Bewertung anpassen kann.