2009-08-11 15 views
1

Dies ist das erste Mal, dass ich eine Datenbank mit einer Tabelle mit 10 Millionen Datensätzen erstelle. Die Tabelle ist eine Mitglieder-Tabelle, die alle Details eines Mitglieds enthält.Erstellen einer großen Tabelle in MySQL

Was muss ich beim Aufbau der Datenbank beachten?

Benötige ich eine spezielle Version von MySQL? Soll ich MyISAM oder InnoDB verwenden?

+0

... nur das eine Duplikat schließen, nicht beide ... – Eric

+0

Bitte schließen Sie das andere (es hat vier Stimmen zu diesem zwei). – paxdiablo

+0

ich schließe es danke –

Antwort

4

Zunächst müssen Sie möglicherweise einen Schritt zurückgehen und Ihr Schema erneut untersuchen. Wie sind Sie mit 10 Millionen Zeilen in der Mitglieder-Tabelle gelandet? Haben Sie wirklich 10 Millionen Mitglieder (es scheint viel zu sein)?

Ich vermute (obwohl ich nicht sicher bin), dass Sie weniger als 10 Millionen Mitglieder haben, in welchem ​​Fall Ihre Tabelle nicht richtig strukturiert sein wird. Bitte posten Sie das Schema, das ist der erste Schritt, um uns zu helfen.

Wenn Sie tun haben 10 Millionen Mitglieder, ist mein Rat, um Ihre Anwendung Vendor-agnostic zu beginnen (d. H. Standard-SQL). Wenn Sie Probleme bekommen, werfen Sie einfach Ihr aktuelles DBMS weg und ersetzen Sie es durch ein leistungsfähigeres.

Sobald Sie festgestellt haben, haben Sie eine, die geeignet ist, dann und nur dann würde ich raten, mit herstellerspezifischen Sachen. Sonst wird es ein schmerzhafter Prozess sein, sich zu ändern.

BTW, 10 Millionen Zeilen ist nicht wirklich eine große Datenbanktabelle, zumindest nicht, wo ich herkomme.

Darüber hinaus ist das Folgende wichtig (nicht unbedingt eine erschöpfende Liste, aber ein guter Start).

  • Entwerfen Sie Ihre Tabellen für 3NF immer. Sobald Sie Leistungsprobleme feststellen, können Sie gegen diese Regel verstoßen, sofern Sie die Konsequenzen verstehen.
  • Stören Sie nicht die Leistungsoptimierung während der Entwicklung, Ihre Abfragen sind im Fluss. Akzeptiere einfach die Tatsache, dass sie nicht schnell laufen können.
  • Sobald die meisten Abfragen gesperrt sind, dann beginnen, Ihre Tabellen zu tunen. Fügen Sie beliebige Indizes hinzu, um die Auswahl zu beschleunigen, zu de-normalisieren und so weiter.
  • Tuning ist nicht eine Set-and-Forget-Operation (weshalb wir unsere DBAs so viel bezahlen). Überwachen Sie die Leistung kontinuierlich und passen Sie sie an.
  • Ich bevorzuge es, meinen SQL-Standard zu behalten, um die Fähigkeit zu behalten, Lieferanten jederzeit zu wechseln. Aber ich bin pragmatisch. Verwenden Sie herstellerspezifisches Zeug, wenn es wirklich einen Schub gibt. Sei dir dessen bewusst, was du verlierst, und versuche, die herstellerspezifischen Dinge so gut wie möglich zu isolieren.
  • Leute, die "select * from ..." verwenden, wenn sie nicht jede Spalte benötigen, sollten in die Unterwerfung geschlagen werden.
  • Ebenso diejenigen, die jede Zeile auf der Clientseite ausfiltern auswählen. Die Leute, die unser DBMS schreiben, sitzen nicht den ganzen Tag herum und spielen Solitaire, sie wissen, wie man Abfragen schnell ausführen kann. Lassen Sie die Datenbank tun, was sie am besten kann. Die Filterung und Aggregation erfolgt am besten auf der Serverseite - senden Sie nur das, was über die Leitung benötigt wird.
  • Generieren Sie Ihre Abfragen, um nützlich zu sein. Außer dem DoD, der Berichte benötigt, in denen alle Komponenten seiner Flugzeugträger bis auf die Nüsse-und-Bolzen-Ebene detailliert beschrieben werden, ist niemand daran interessiert, Ihren 1200-seitigen Bericht zu lesen, egal wie nützlich er Ihrer Meinung nach ist.Tatsächlich glaube ich nicht, dass das DoD auch ihre liest, aber ich würde nicht wollen, dass irgendein General mich auskaubt, weil ich nicht ausgeliefert habe - diese Typen können lauten und sie haben ein gutes Stück raffinierter Waffen unter ihren Steuerung.
+0

ich habe 10 Millionen Zeilen von verschiedenen Benutzern –

+0

Wünschte, meine Website hatte 10 Millionen Benutzer .... –

+0

Sie sind eigentlich Bewohner des Staates –

0

Zumindest InnoDB verwenden. Sie werden den Schmerz spüren, wenn Sie feststellen, dass MyISAM gerade Ihre Daten verloren hat ...

Abgesehen davon sollten Sie mehr Informationen darüber geben, was Sie tun möchten.

0

Sie müssen InnoDB nicht verwenden, wenn Sie keine Datenintegritäts- und Atomaktionsanforderungen haben. Sie möchten InnoDB verwenden, wenn Sie Fremdschlüssel zwischen Tabellen haben und Sie die Einschränkungen beibehalten müssen oder wenn Sie mehrere Tabellen im atomaren Betrieb aktualisieren müssen. Andernfalls, wenn Sie nur die Tabelle für die Analyse verwenden müssen, ist MyISAM in Ordnung.

Stellen Sie bei Abfragen sicher, dass Sie intelligente Indizes für Ihre Abfrage erstellen. Wenn Sie beispielsweise nach Spalten c sortieren und basierend auf den Spalten a und b auswählen möchten, stellen Sie sicher, dass Sie über einen Index für die Spalten a, b und c in dieser Reihenfolge verfügen und dieser Index die vollständige Länge jeder Spalte enthält , anstatt ein Präfix. Wenn Sie Ihren Index nicht richtig machen, werden Sie durch das Sortieren einer großen Datenmenge getötet. Siehe http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

Nur eine Notiz über InnoDB und Einrichten und Testen einer großen Tabelle damit. Wenn Sie Ihre Daten eingeben, dauert es Stunden. Stellen Sie sicher, dass Sie Commits in regelmäßigen Abständen ausstellen. Wenn Sie aus irgendeinem Grund anhalten und wiederholen möchten, müssen Sie 1) Stunden auf die Wiederherstellung der Transaktion warten oder 2) mysqld beenden, das InnoDB-Wiederherstellungsflag auf "Keine Wiederherstellung" setzen und neu starten. Auch wenn Sie Daten von Grund auf neu injizieren möchten, DROP die Tabelle und neu erstellen ist fast augenblicklich, aber es wird Stunden dauern, um tatsächlich "FROM Tabelle löschen".

+0

"nicht ... Integrität und [Atomizität]"? Sie sind zwei der vier ACID-Eigenschaften eines DBMS. Ohne sie können Sie Ihre Sachen einfach in einer flachen Textdatei speichern :-) – paxdiablo

+0

Pax, MyISAM-Tabelle ist keine ACID, aber sie ist definitiv immer noch nützlich, um nur Ergebnisse zu analysieren. – OverClocked

Verwandte Themen