Struktur
e34er
- datenbank
Hallo,
muss eine Datenbank erstellen, welche etwa 40 Millionen Einträge hat.
Z.B. Stammdaten einer Firma, Speicherung beliebig vieler Ansprechpartner, Speicherung beliebig vieler Zusatzmerkmale, Speicherung beliebig vieler Branchenzuordnungen...
Die Struktur muss schnell Durchsuchbar sein, sodass sich schnell
Statistiken erstellen lassen. Zusätzlich muss es möglich sein Abfragen zu machen wie:
"Gib mir alle Fimren mit einem Ansprechpartner, welcher als Funktion
"Geschäftsführer" hat und wo der Firmennamen "mbh" enthält.
ODER
Gib mir alle Privatpersonen in Deutschland, deren Telefonnummer auf 3
endet.
Habt Ihr Ideen, wie die Struktur am besten wär, so dass eine Abfrage nicht länger als 30 Sekunden dauert?
Danke ersteinmal...
Hallo
Z.B. Stammdaten einer Firma, Speicherung beliebig vieler Ansprechpartner, Speicherung beliebig vieler Zusatzmerkmale, Speicherung beliebig vieler Branchenzuordnungen...
n:m-Beziehungen werden normalerweise in 3 Tabellen abgelegt, z.B.
Stammdaten (FirmenID, Firmenname, ...)
Ansprechpartner (AnsprechpartnerID, Name, Funktion,...)
Zuordnung (FirmenID, AsprechpartnerID)
"Gib mir alle Firmen mit einem Ansprechpartner, welcher als Funktion
"Geschäftsführer" hat
geht dann über
select ....
from Stammdaten, Ansprechpartner, Zuordnung
where Stammdaten.FirmenID=Zuorndung.FirmenID
and Ansprechpartner.AnsprechpartnerID=Zuorndung.AnsprechpartnerID
and Anprechpartner.Funktion='Geschäftsführer'
usw.
Die Funktion kannst du natürlich auch als Rolle in die Zuordnung mit übernehmen, wenn z.B. ein Ansprechpartner mehrere Rollen haben kann.
Gruß Mia
yo,
n:m-Beziehungen werden normalerweise in 3 Tabellen abgelegt
ich sehe da mehr 1:n beziehungen, es sei den ein und derselbe ansprechpartner kann auch gleichzeitig der ansprechpartenr in mehreren firmen sein.
was das datenbank-design betrifft, so würde ich mich als erstes fragen, welche dbms systeme dir den zur verfügung stehen, um eine nicht gerade geringe datenmenge zu administrieren.
Ilja
Danke für die Antwort...
Das war ja auch meine Idee, aber bei etwa 40 Millionen Datensätzen wird ein Zugriff trotzdem länger als 30 Sekunden dauern... Und da liegt das Problem...
Bei der folgenden Abfrage würde der Zeitrahmen schon gesprängt:
Gib mir alle Datensätze, welche:
Vielleicht noch Ideen?
yo,
Vielleicht noch Ideen?
lesen und verstehen und deshalb noch einmal. als erstes solltest du uns mitteilen, welches dbms dir zur verfügung steht. dann gibt es nämlich eventuell lösungen, die deinen anforderungen entsprechen wie zum beispiel materilized views.
Ilja
Als DBMS steht mir MySQL zur Verfügung...
yo,
Als DBMS steht mir MySQL zur Verfügung...
das ist doch ein mann ein wort. leider komme ich eher aus einem anderen bereich, bzw. dbms. dort hätte man diverse möglichkeiten es schnell zu machen. aber grundsätzlich würde ich folgendermaßen vorgehen.
1. einen ER modell entwerfen
2. die benötigten (wichtigsten) abfragen ausarbeiten
3. das datenmodell darauf anpassen und geeignete indexe setzen.
4. probedurschläufe machen und eventuell nachkorregieren
das sind zwar sehr allgemein gehaltene schritte, aber es ist ein anfang. als erstes solltest du dir über dein ER-Modell gedanken machen. wenn du fragen dazu hast, findest du hier sicherlich hilfe. als ein schritt nach dem anderen. aber dazu musst du schon ein wenig mehr infos geben.
Ilja
Danke an Alle...
Habt mir schon ein großes Stück weitergeholfen :-)
Hallo e34er,
Bei der folgenden Abfrage würde der Zeitrahmen schon gesprängt:
Gib mir alle Datensätze, welche:
Was ist hier ein Datensatz? Eine Firma? Bitte beachte, dass Deine Daten in verschiedenen Tabellen strukturiert sind. Du hast keine flache Tabelle mit 40.000.000 Datensätzen.
- PLZ Gebiet 6 haben
- einen Anprechpartner mit eMail Adresse haben
- eine Homepage im DE Bereich besitzen
Ergebnis = 50.000 Datensätze
Warum sollte die Ermittlung dieser Daten über 30 Sekunden dauern?
Du musst natürlich darauf achten, dass die Einschränkungen in der richtigen Reihenfolge vom DBMS ausgewertet werden:
1. PLZ (Da ist ein Index drauf)
2. ASP is not NULL
3. die Homepage (da greift kein Index)
Für [3] könntest Du allerdings einen Trick anwenden. Falls Du wirklich oft nach den Top-Level-Domains suchst, dann speichere diese in einem eigenen Feld, auf das Du einen Index setzt.
Du musst Dir selbstverständlich im Klaren sein, das das Anzeigen von extrem großen Datenmengen Zeit in Anspruch nimmt.
Eine weitere Frage ist:
Was machst Du mit diesen 50.000 Datensätzen?
An alle eine E-Mail versenden? Das wird selbstverständlich etwas dauern :-)
Detaillierte Strukturen anzugeben wage ich bei solch vagen Informationen, wie Du sie geliefert hast, selbstverständlich nicht.
Freundliche Grüsse,
Vinzenz