kostenloser Webspace werbefrei: lima-city


Sehr große Datenbank in MySQL (mehrere Mrd. Einträge)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mermadalis

    Kostenloser Webspace von mermadalis

    mermadalis hat kostenlosen Webspace.

    Hallo zusammen,

    ich stehe vor folgender Herausforderung:

    für eine Web-Anwendung benötige ich Zugriff auf eine sehr große Datenbank. Die Zahl der Einträge beträgt grob geschätzt 10-15 Milliarden (Größenordnung 10^10). Später möchte ich über PHP auf diese Datenbank zugreifen, weshalb ich die Umsetzung gerne über MySQL machen würde (sehr einfache PHP-Anbindung).

    Allerdings benötige ich für die Anwendung sehr schnelle Zugriffszeiten auf einzelne Einträge. Bei ersten Tests mit einigen Millionen Einträgen habe ich allerdings schon recht große Zugriffszeiten festgestellt (mehrere Sekunden um einen Eintrag per SELECT auszulesen), weshalb ich denke, dass ich die Datenbank irgendwie falsch konfiguriert habe.

    Der grundlegende Aufbau der Datenbank sieht in etwa so aus:

    ID | feld_1 | feld_2 | feld_3

    die Einträge sollen später ausschließlich anhand der ID ausgelesen werden, d.h. eine Sortierung nach den Feldern feld_1, feld_2 oder feld_3 ist nicht erforderlich.

    Da ich in MySQL nur über Grundkenntnisse bei "normalen" Datenbankgrößen verfüge, würde ich mich freuen, wenn mir jemand sagen könnte, wie ich eine Datenbank für derartige Datenmengen optimieren kann, sodass Zugriffszeiten und Speicherplatzbedarf möglichst gering gehalten werden.


    Vielen Dank für alle Informationen!

    mermadalis

    P.S: Zur Beruhigung: Nein, ich habe nicht vor, diese Daten-Mengen bei Lima-City abzulegen :wink:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Grundsetztlich kann man in MySQL immer auch nach anderen Spalten Suchen/Ordnen/... also nur dem Primärschlüssel (bei dir id). Das kann sich natürlich nevativ auf die Performance auswirken.
    Falsch konfigurieren kann man da eigendlich nichts (Ausser wenn man Ergebnise nicht für einen zweiten Aufruf Cacht)
    Was vll eine möchlichkeit ist das du feld_1/2/3 mit php in ein JSON umwandelst und dann nur noch 2 Spalten brauchst.
    Die beste Möglichkeit währe aber auf einen anderen Datenbanktypen umzusteigen.
    Nähmlich eine Key-Value DB wie z.B. Redis, da diese viel schneller sind aber halt auch nur Daten nach einem Schlüssel heraussuchen können.
    Also nur das können was du brauchst :)
  4. Autor dieses Themas

    mermadalis

    Kostenloser Webspace von mermadalis

    mermadalis hat kostenlosen Webspace.

    Vielen Dank erstmal.

    Caching der Ergebnisse ist ohnehin klar, ändert aber am grundlegenden Problem der langen Zugriffszeiten erstmal nichts.

    Dass MySQL immer nach allen Spalten ordnen kann, hatte ich mir schon gedacht, da die Datenbank deutlich mehr Speicher verbraucht als die Rohdaten, also von MySQL direkt "in alle Richtungen" sortiert abgespeichert werden. Ich hatte gehofft, dass ich das vielleicht irgendwie abstellen kann, um den Speicherplatzbedarf zu minimieren.

    Das Problem an einer Key-Value-DB ist, dass die ID bei mir nicht eindeutig ist, d.h. es können mehrere Einträge mit der selben ID bestehen (war vielleicht blöd von mir, die Spalte hier ID zu nennen). Wenn ich das richtig verstehe, setzen Key-Value-DBs wie Redis voraus, dass die ID eindeutig ist, oder?

    Gibt es nicht die Möglichkeit, eine MySQL-Datenbank als eine Key-Value-DB zu konfigurieren?
  5. mermadalis schrieb:
    Vielen Dank erstmal.

    Caching der Ergebnisse ist ohnehin klar, ändert aber am grundlegenden Problem der langen Zugriffszeiten erstmal nichts.

    Dass MySQL immer nach allen Spalten ordnen kann, hatte ich mir schon gedacht, da die Datenbank deutlich mehr Speicher verbraucht als die Rohdaten, also von MySQL direkt "in alle Richtungen" sortiert abgespeichert werden. Ich hatte gehofft, dass ich das vielleicht irgendwie abstellen kann, um den Speicherplatzbedarf zu minimieren.

    Das Problem an einer Key-Value-DB ist, dass die ID bei mir nicht eindeutig ist, d.h. es können mehrere Einträge mit der selben ID bestehen (war vielleicht blöd von mir, die Spalte hier ID zu nennen). Wenn ich das richtig verstehe, setzen Key-Value-DBs wie Redis voraus, dass die ID eindeutig ist, oder?

    Gibt es nicht die Möglichkeit, eine MySQL-Datenbank als eine Key-Value-DB zu konfigurieren?


    (Bezogen auf mein Wissen aus CouchDB)
    Du kannst ein Feld haben, dass deine "ID" enthält und dann ein richtiges ID-Feld. Mit einem Filter ist es dann möglich alle "richtigen IDs" zu bekommen, die "deine ID" beinhalten. Dann brauchst du nur noch die "richtigen IDs" aus dem Filterergebnis abzufragen. Bei CouchDB werden diese Funktionen und deren Ergebnisse gespeichert (und bei neuen oder geänderten Dokumenten wird auch nur das behandelte Dokument aktualisiert) -> Deine Ergebnisse werden immer statisch zurück gegeben, also auch bei Milliarden von Einträgen tolle Geschwindigkeiten. Andere KV-Stores werden es
    sicher ähnlich handhaben.

    Edit:

    CouchDB nutzt zur Kommunikation übrigens eine HTTP-Rest-API, das heißt, dass du nicht nur mit PHP sondern vermutlich jeder noch lebenden Programmiersprache ohne Probleme damit interagieren kannst.

    Beitrag zuletzt geändert: 9.6.2015 20:22:47 von tchab
  6. Bei sehr grossen DBs lohnt sich immer die Prüfung, ob MySQL noch das richtige DBMS ist oder ob man doch auf MSSQL oder Oracle gehen sollte.
    Bleiben wir aber mal bei deinen Performanceproblemen unter MySQL:
    Wieviel RAM kannst Du nutzen?
    Schau Dir mal folgendes an:
    https://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
    Wenn Du eine entsprechende Datenbanktabelle die sich im RAM befindet abfragst, hast du dann auch noch das Performanceproblem?
    (RAM-Zugriff versus Festplattenzugriff ist ca. um den Faktor 1:1000000 mal schneller)

    Gruss Dunkeltuten

    Beitrag zuletzt geändert: 10.6.2015 8:10:21 von dunkeltuten
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!