wie würdet ihr das machen?
-
hallo zusammen,
ich soll eine Suchfunktion schreiben und das Ergebnis anzeigen.
Problem ist nur das es mehr als 50 Millionen Datensätze sind und das Ergebnis nicht erst nach 10 Minuten ermittelt werden soll, sondern innerhalb von wenigen Sekunden.
Wie würdet ihr sowas handeln?
-
Die Datenbank macht das doch für dich?
-
Ich würde mir eine Index-Datei aufbauen, in der man zumindest ungefähr die Position bestimmen kann, wo der gesuchte Datensatz steht - von dort aus kannst du dann weitersuchen.
(bessere Alternative - pack' die Daten in eine professionelle Datenbank, die kümmert dann (hoffentlich) selbst sich um effektive Suchanfragen)
-
sorry, war wohl ein bisschen unverständlich erklärt.
Die Daten liegen bereits in der Datenbank. Ich muss sie dort auslesen. Deswegen dauert es lang, wenn ich 50 Millionen Datensätze durchsteppe...
-
Petommy schrieb:
Deswegen dauert es lang, wenn ich 50 Millionen Datensätze durchsteppe...
Warum gehst du die alle durch, statt die Filtermöglichkeiten der Datenbank zu benutzen?
-
welche Filtermöglichkeiten?
z.B.: "select blah from blah where blah = blah" ??
So steppt ich doch genauso alle Datensätze durch oder nicht?
-
Petommy schrieb:
So steppt ich doch genauso alle Datensätze durch oder nicht?
Nein, so kann die Datenbank Indizes und was weiß ich noch benutzen. Ich bin ziemlich sicher, dass die Datenbank ihre Daten schneller durchsuchen kann als du.
-
Vielleicht schneller als ich, aber immernoch viel zu langsam für meine Anforderung. Das hab ich bereits realisiert. Viel zu langsam ;.)
Hast du schon mal 50 Mil. Datensätze durchsucht und nach 1 Sekunde eine Antwort bekommen?
Was haltet ihr von der Idee alle Datensätze in eine Multimap zu klatschen und über find() zu suchen? Der Cache ist doch um ein vielfaches schneller als jedesmal ein Zugriff auf die Platte zu machen....
Eine Multimap ist intern als AVL-Baum aufgebaut und somit garantiert sehr schnell.Oder stoß ich da auf Probleme die mir im Moment nicht bewusst sind?
-
Ja, erstens ist selbst die Suche in einer multimap nicht SOO schnell - und zweitens dürfte bei 50 Mio. Einträgen dein RAM in die Knie gehen.
-
Ich glaube nicht das das in den Speicher passt.
-
Petommy schrieb:
Hast du schon mal 50 Mil. Datensätze durchsucht und nach 1 Sekunde eine Antwort bekommen?
Die Anzahl der Datensätze ist doch völlig wurscht, wenn du einen Index vorbereitet hast.
-
Petommy schrieb:
...Hast du schon mal 50 Mil. Datensätze durchsucht und nach 1 Sekunde eine Antwort bekommen?
...Wenn der Suchbegriff im Index liegt, dann geht die Suche ganz sicher schneller
als 1 Sekunde.Zumindest wenn man kommerzielle Datenbank wie Oracle, DB2 oder SQL-Server
verwendet.
-
ich bekomm als Suchkriterium z.B. einen Namen oder ein Geburtsdatum.
In der Datenbank ist der Schlüssel eine id.
Ich benutze eine Informix DB.MFK: Wieso sollt ich suchen müssen, wenn ich den Index kenn?? Ich kenn den Index nicht.
-
Wenn du keine Ahnung hast, lass am besten die Finger davon.
-
tolle aussage!!
-
Petommy schrieb:
MFK: Wieso sollt ich suchen müssen, wenn ich den Index kenn?? Ich kenn den Index nicht.
Mit "Index" meint man bei Datenbanken keine "Ordnungsnummer" eines Datensatzes, sondern das hier: http://de.wikipedia.org/wiki/Datenbankindex
-
Petommy schrieb:
ich bekomm als Suchkriterium z.B. einen Namen oder ein Geburtsdatum.
In der Datenbank ist der Schlüssel eine id.
Ich benutze eine Informix DB.Kleiner Tip: Die meisten Datenbanken kann man so einstellen, daß sie zu einer beliebigen Spalte eine Indexstruktur aufbauen können.
MFK: Wieso sollt ich suchen müssen, wenn ich den Index kenn?? Ich kenn den Index nicht.
"Index" ist in dem Fall etwas mehrdeutig
In einer Datenbank bezeichnet man damit eine Hilfsstruktur, mit der die Suche beschleunigt werden kann (siehe Wikipedia).
-
hmmm, ja, aber, ähm... bin momentan sehr verwirrt...
trotzdem thaanx -> MFK
-
In Deinem Fall willst Du auf der Datenbank Indices für den Geburtstag und den Namen erstellen und dann danach suchen
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.