Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Welcher Spaltentyp sollte verwendet werden, um serialisierte Daten in einer MySQL-Datenbank zu speichern?

Um zu antworten:Text scheint in vielen DBMS veraltet zu sein, also verwenden Sie besser entweder ein Blob oder ein Varchar mit einem hohen Limit (und mit Blob erhalten Sie keine Codierungsprobleme, was ein großes Problem mit Varchar und Text ist). .

Wie auch in diesem Thread in den MySQL-Foren gezeigt , Festplatten sind billiger als Software, also sollten Sie zuerst Ihre Software entwerfen und zum Laufen bringen, und erst dann, wenn der Platz ein Problem wird, möchten Sie diesen Aspekt vielleicht optimieren. Versuchen Sie also nicht, die Größe Ihrer Spalte zu früh zu überoptimieren, stellen Sie die Größe besser zuerst größer ein (außerdem werden dadurch Sicherheitsprobleme vermieden).

Zu den diversen Kommentaren:Zu viel SQL-Fanatik hier. Trotz der Tatsache, dass ich SQL und relationale Modelle sehr mag, haben sie auch ihre Tücken.

Das Speichern serialisierter Daten in der Datenbank ohne Mängelgewähr (z. B. das Speichern von JSON- oder XML-formatierten Daten) hat einige Vorteile:

  • Sie können ein flexibleres Format für Ihre Daten haben:Felder im laufenden Betrieb hinzufügen und entfernen, die Spezifikation der Felder im laufenden Betrieb ändern usw.
  • Weniger Impedanzkonflikt mit dem Objektmodell:Sie speichern und rufen die Daten so ab, wie sie in Ihrem Programm sind, im Vergleich zum Abrufen der Daten und dann zum Verarbeiten und Konvertieren zwischen den Strukturen Ihrer Programmobjekte und den Strukturen Ihrer relationalen Datenbank .

Und es gibt noch viel mehr andere Vorteile, also bitte kein Fanboyismus:relationale Datenbanken sind ein großartiges Werkzeug, aber lassen Sie uns nicht die anderen Werkzeuge, die wir bekommen können, aufgeben. Je mehr Tools, desto besser.

Als konkretes Anwendungsbeispiel füge ich meiner Datenbank tendenziell ein JSON-Feld hinzu, um zusätzliche Parameter eines Datensatzes zu speichern, wobei die Spalten (Eigenschaften) der JSON-Daten niemals einzeln ausgewählt werden, sondern nur beim richtigen Datensatz verwendet werden ist bereits ausgewählt. In diesem Fall kann ich meine Datensätze immer noch mit den relationalen Spalten unterscheiden, und wenn der richtige Datensatz ausgewählt ist, kann ich einfach die zusätzlichen Parameter für jeden beliebigen Zweck verwenden.

Mein Rat also, das Beste aus beiden Welten (Geschwindigkeit, Serialisierbarkeit und strukturelle Flexibilität) beizubehalten, verwenden Sie einfach ein paar relationale Standardspalten, die als eindeutige Schlüssel dienen, um zwischen Ihren Zeilen zu unterscheiden, und verwenden Sie dann eine Blob/Varchar-Spalte, wo Ihre serialisierten Daten verwendet werden eingefügt werden. Normalerweise sind nur zwei/drei Spalten für einen eindeutigen Schlüssel erforderlich, daher ist dies kein großer Overhead.

Sie könnten auch an PostgreSQL interessiert sein, das jetzt einen JSON-Datentyp hat, und am PostSQL-Projekt um JSON-Felder direkt als relationale Spalten zu verarbeiten.