Ich kann eine Menge Daten speichern (<= 4 GB) in einer Tabellenspalte. Aber ist es eine gute Idee?

StackOverflow https://stackoverflow.com/questions/2091541

  •  21-09-2019
  •  | 
  •  

Frage

Um eine lange Geschichte kurz zu machen, einen Teil der Anwendung auf Bedürfnisse Ich arbeite in einer Datenbank eine etwas große Menge von Daten zu speichern, zu einem anderen Teil der Anwendung später abholen. Normalerweise wäre dies <2000 Zeilen, aber 300.000 Zeilen gelegentlich überschreiten. Die Datenanforderungen vorübergehend gespeichert werden und können danach gelöscht werden.

Ich habe mit verschiedenen Ideen herumgespielt und eine Sache, kam heute in den Sinn. Der Datentyp kann LONGTEXT speichern maximal 2 ^ 32 Bytes, die bis zu 4 GB entspricht. Nun, das ist eine Menge Sachen zu stopfen in eine Zeile einer Tabelle. Wohlgemerkt, würden die Daten wahrscheinlich nicht überschreiten 60-80 MB Allenfalls. Aber meine Frage ist, ist es eine gute Idee, dass eigentlich tun?

Die beiden Lösungen Ich bin derzeit mit der Verwendung sind so etwas wie dieses liebäugelt:

  • Einfügen aller Daten als einzelne Zeilen in eine „temporäre“ Tabelle, die nach dem Fertig abgeschnitten würde.
  • Einfügen aller Daten als serialisierte Zeichenfolge in eine LONGTEXT Spalte in einer Zeile, die nach dem Beenden gelöscht werden würden.

Rein aus Performance-Sicht wäre es besser, die Daten zu speichern als potentiell> 300.000 einzelne Zeilen oder als 60 MB LONGTEXT Eintrag?

Wenn es ein Wasch ist, werde ich wahrscheinlich mit der LONGTEXT Option gehen, da es den Teil der Anwendung machen würde, dass nimmt die Daten einfacher zu schreiben. Es wäre auch mit noch einem anderen Teil in besser binden, was die Gesamtleistung der Anwendung erhöhen würde.

Ich würde keine Gedanken darüber, dies zu schätzen wissen.

War es hilfreich?

Lösung

Serialisierung all diese Daten in eine LONGTEXT ... Blasphemie !! :)

Im Ernst, fällt mir ein, dass, wenn Sie das tun, würden Sie keine andere Wahl haben, als es zu extrahieren, alles in einem, riesigen, Stück. Wenn Sie es in einzelne Zeilen, auf der anderen Seite zu verbreiten, können Sie Ihr Front-End es in kleineren Chargen holen müssen.

Mindestens sich diese Option zu geben scheint, die intelligente, was zu tun ist. (Beachten Sie, dass die künftige Größe Anforderungen einmal Daten zu unterschätzen kann ein fataler Fehler sein!)

Und wenn Sie Ihre Tabellen richtiges Design, bezweifle ich sehr, dass 60MiB Daten Ausbreitung über 300.000 Zeilen wäre jeden weniger effizient als 60MiB Text Abrufen und Analysieren von, dass auf dem Front-End.

Letztlich ist die Frage: Denken Sie, Ihre Front-End den Text mehr analysieren kann effizienter als MySQL es holen kann

?

Andere Tipps

Dies sollte in Ordnung sein, solange Sie eine Speicher-Speicher-Engine verwenden . In MySQL, das bedeutet die MEMORY-Speicher-Engine statt InnoDB oder MyISAM verwenden. Ansonsten Plattennutzung Ihre App in die Knie bringen.

Welche Art von Daten und wie sie verwendet werden? Wahrscheinlich wird es viel besser zu speichern und verarbeiten es in Erinnerung an Ihre Anwendung. Zumindest wird es viel schneller und wird nicht DB-Engine geladen werden.

Sie können immer es in der Datenbank speichern als 300.000 Zeilenformat und verwenden Memcached die Daten zwischenzuspeichern, so dass Sie es nicht wieder tun. Bitte beachten Sie, dass Memcached speichert sie in dem Speicher der Maschine also, wenn Ihr eine Menge dieser Daten verwenden, können Sie Art und Weise eine niedrige darauf verfallen setzen. Aber Memcached beschleunigt signifikant die Zeit bis zu Daten abrufen, weil Sie nicht über Abfragen jede Seite laden zu tun.

Wenn Sie vorhaben, nur um das Schreiben eine große, temporäre BLOB Sie auf einem gemeinsam genutzten Dateisystem statt in eine temporäre Datei schreiben könnte in Betracht ziehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top