Frage

Zuerst möchte ich wissen, wie Sie die Datenbankgröße in Bezug auf die größte Tabelle schätzen, die sie enthält. Ich habe Folgendes:

+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| users_id | int(32) unsigned | NO   | MUL | NULL    |       |
| s        | binary(16)       | NO   | PRI | NULL    |       |
| t        | binary(16)       | NO   | PRI | NULL    |       |
| x        | binary(16)       | NO   | PRI | NULL    |       |
+----------+------------------+------+-----+---------+-------+

Dies ist die Tabelle, die für die Größe von Bedeutung ist (die andere Tabelle besteht nur darin, Benutzerdaten (ID, Benutzer, Pass, E -Mail) zu verwalten. Ich erwarte nicht, dass sie mehr als 100 Einträge haben).

Ich erwarte ungefähr 7,61263 * 10^9 Einträge in die obige Tabelle. Ich habe diese einfachen Berechnungen durchgeführt: 7,61263 * 10^9 + (4 Bytes + 16 Bytes + 16 Bytes + 16 Bytes) ~ = 395 GB. Aber ich weiß nicht, wie ich den von den DBMs stammenden Overhead (Indizes, Datenbankstruktur ...) berücksichtigen soll?

Wie schätzt ich die Datenbankgröße?

Was ist mit der Geschwindigkeit und der Stabilität von MySQL mit diesem großen Tisch? Muss ich die Daten über zwei oder mehr Datenbanken teilen, um die Größe zu verringern?

War es hilfreich?

Lösung

Soweit Sie nach beiden Größe fragen und Geschwindigkeit, ja, Russell hat Recht. Du wirst Actully musst Füllen Sie eine Tabelle mit Beispieldaten aus, und testen repräsentative Fragen, um zu sehen, wie sie sich ausführen.

Für die Größenprobleme können Sie nicht immer die genaue Größe für die Indizes berechnen, sondern die MySQL -Dokumentation für Datenart Speicheranforderungen und die entsprechende Dokumentation für die Speicher -Engine, die Sie verwenden. Informationen zum Zeilenaufwand und einige Leitlinien für die Schätzung der Indizes.

(Zum Beispiel werden Sie das 2 ** 32 -Grenzwert für Reihen in MyISAM erreichen, also müssen Sie mit bauen Unterstützung bei großen Tischen)

Wenn Sie mehrere Datenbanken benötigen - sollten Sie es nicht tun. Wenn Sie es über mehrere Tabellen verteilen müssen, können Sie jederzeit verwenden Partitionierung, was ich denke, sollte auch helfen, wenn Sie sich dagegen drängen Dateisystemlimits.

Andere Tipps

Schreiben Sie eine einfache Schleife, die die Daten in die Tabelle generiert und füllt. Dann können Sie all diese Fragen für sich selbst viel genauer und präzise beantworten. Es dauert nur minimal, um den realen Test durchzuführen.

Für MyISAM fügen Sie 1 Byte pro Zeile zu der Berechnung hinzu, die Sie gegeben haben. Das kümmert sich um die Daten. Für jeden Index geht die Mathematik ungefähr so

  • Berechnen Sie die Feldgrößen
  • Fügen Sie 6 für den Zeiger auf die Daten hinzu (unter der Annahme des Standards)
  • Multiplizieren Sie, sagen wir 1,5, um BTree Overhead zu berücksichtigen.

Für InnoDB ist die Mathematik viel chaotischer. Die einfache Antwort besteht darin, die Daten+Indexgröße für MyISAM zu übernehmen und dann mit 2 oder 3 zu multiplizieren.

Bitte verwenden Sie die Show Create -Tabelle, nicht Desc - ich kann Ihre Indizes nicht wirklich sehen, und ich vermute, Sie haben einen großen PK, der sich negativ auf Sekundärschlüssel auswirkt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top