e34er: Struktur

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...

  1. 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

    1. 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

    2. 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:

      • PLZ Gebiet 6 haben
      • einen Anprechpartner mit eMail Adresse haben
      • eine Homepage im DE Bereich besitzen
        Ergebnis = 50.000 Datensätze

      Vielleicht noch Ideen?

      1. 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

        1. Als DBMS steht mir MySQL zur Verfügung...

          1. 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

            1. Danke an Alle...
              Habt mir schon ein großes Stück weitergeholfen :-)

      2. 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