Große MySQL-Tabellen

stimmen
3

Für eine Web-Anwendung, die ich entwickeln werde, brauche ich eine große Anzahl von Datensätzen zu speichern. Jeder Datensatz besteht aus einem Primärschlüssel und einem einzigen (short-Ish) Zeichenfolge. Ich erwarte, dass verfügbar über 100 GB Speicher haben und möchte in der Lage sein, alles zu nutzen.

Die Datensätze werden eingefügt, gelöscht und gelesen häufig und ich muss eine MySQL-Datenbank verwenden. Die Integrität der Daten ist nicht entscheidend, aber die Leistung ist. Welche Probleme und Gefahren bin ich wahrscheinlich zu begegnen und die Speicher-Engine am besten für die Aufgabe geeignet wäre?

Vielen Dank, J

Veröffentlicht am 09/12/2008 um 20:58
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
5

Welche Lösung auch immer Sie verwenden, da Sie Ihre Datenbank sagen wird Zuschreibung schwer Sie müssen sicherstellen, dass die gesamte Tabelle auf schreibt bekommen nicht gesperrt. Dies schließt aus MyISAM, die einige vorgeschlagen haben. MyISAM wird in der Tabelle auf ein Update sperren, löschen oder einzufügen. Das bedeutet, dass jeder Kunde, der aus der Tabelle lesen will muss warten, bis der Schreib zu beenden. Weiß nicht, was die INSERT obwohl niedrige Priorität kann IGNORE, wahrscheinlich einige Hack um den Tisch sichernde :-)

Wenn Sie einfach MySQL verwenden müssen, sollten Sie InnoDB, die auf Schreibsperre nicht. Ich weiß nicht, wie MySQL VACUUM InnoDB-Tabellen funktioniert (InnoDB ist MVCC wie PostgreSQL und muss so aufzuräumen) ... aber Sie nehmen müssen, dass in Betracht, wenn Sie eine Menge Updates oder Löschungen tun.

Beantwortet am 25/02/2009 um 22:23
quelle vom benutzer

stimmen
3

Es hängt alles das Lese- / Schreibmuster Ihrer Anwendung erzeugt, und das Niveau der Genauigkeit Sie erhalten mögen. wenn Sie nicht wirklich Pflege für exemple, mit alle den letzten sofort verfügbar eingefügten Zeilen betrachten INSERT LOW PRIORITY mit IGNORE kann SELECTs helfen. Wenn die Textgröße relativ klein ist, kann man einen festen CHAR-Typen verwendet werden, die sehr viel helfen Indizierung und Zeit von SELECTs reduzieren Wenn Ihre Anwendung eine Menge Updates erzeugt, werden Sie Speicher-Engine InnoDB bevorzugen, die nur eine Zeile sperren können, wenn Aktualisierung (vs all die Tabelle auf MyISAM). Auf der anderen Seite, seine mehr CPU-Kapazität, so dass, wenn Sie verwenden, um Transaktionen nicht und dass Ihr Update Muster relativ klein ist, sollten Sie MyISAM verwenden

Beantwortet am 10/12/2008 um 17:07
quelle vom benutzer

stimmen
1

Wenn Sie die Indizierung verwenden (und auch wenn Sie nicht) können Sie die Skalierung Probleme auftreten. Sie können Partitionierungs versuchen, um zu versuchen, diese Auswirkungen zu verringern.

In meinem eigenen Projekt ist Integrität nicht entscheidend, aber die Leistung ist auch. Was wir taten, war, alle Transaktionsanforderungen entspannen, Plattensynchronisationsanforderungen entspannen, und Batch-Einsätze begehen und wir unsere Schreibgeschwindigkeiten wirklich verbessert.

Also, stellen Sie sicher, dass Sie stimmen Ihre Speichergrößen Ihre eigenen Tests durchführen. Ich glaube, MySQL ein paar verschiedene Arten von Caches von denen Sie die Größe konfigurieren.

Beantwortet am 09/12/2008 um 21:05
quelle vom benutzer

stimmen
0

Sie sind viel besser dran, wenn das „shortish string“ ist in einer festen Länge Spalte, so dass die Tischlänge Reihen befestigt ist. MySQL mit MyISAM wird sehr effizient dann für Sie arbeiten. Ordnen Sie so viel Speicher wie möglich für den Key-Puffer, so dass ein Großteil des Index im Speicher. Ihr Ziel sollte ein einzelner Direktzugriff auf die Festplatte sein, eine Zeile abzurufen - Sie können nicht besser machen können als die gegebene 100GB von Daten und 8 GB Speicher. Sie sollten nicht mehr als ein paar hundert solcher Anfragen pro Sekunde zu erreichen erwarten, denn das ist alles die Zufallszugriffen eine Platte machen kann.

Sie könnten in meiner MySQL benutzerdefinierten Speicher - Engine (beschrieben interessieren hier ). Es verwaltet Speicher anders MyISAM, obwohl das Profil Ihrer Anwendung ist nicht genau das, was mein Motor wurde optimiert.

Beantwortet am 21/03/2009 um 14:47
quelle vom benutzer

stimmen
0

große MySQL-Abfragen machen meinen Quad-Core / 8GB Ram DB Server Absturz ...

Lösung ist PostgresSQL zu verwenden (SQL Server, wenn Sie es sich leisten können)

Beantwortet am 09/12/2008 um 21:20
quelle vom benutzer

stimmen
0

Sie wollen auf jeden Fall MyISAM für die Speicher-Engine verwenden. Aber Sie sagen, Sie 100 GB erwarten und es wird nur einen kurzen ish String-Wert enthalten. Sie wollen auf jeden Fall ein 64-Bit-int für Ihre Identität / Primärschlüssel verwenden.

Aber meine Frage ist. Verwenden Sie diese Session-Informationen von der Website zu speichern? Wenn ja Sie wollen memcache statt MySQL verwenden.

Beantwortet am 09/12/2008 um 21:16
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more