Question

Je travaille sur une application qui permet aux utilisateurs d'ajouter dynamiquement des questions aux formulaires Web. Nous utilisons MySQL comme backend, et je suis en train de trouver le moyen le plus rapide, la plus efficace de stocker les données de formulaire.

Auparavant, nous avons stocké les données dans un tableau séparé pour chaque section de forme. Les colonnes ont été nommés selon un système qui nous a permis de cartographier la question dynamique à son emplacement de stockage. Les inconvénients sont que le système de mappage de stockage a été mal conçu, ce qui rendait la modification des formes avec les données existantes cauchemar. En outre, les limitations de MySQL sur la mémoire par ligne limité le nombre de questions que nous pourrions avoir par section.

Par conséquent, je cherche à utiliser une seule table pour contenir toutes les données de formulaire. Parce que les questions de rédaction sont autorisés, j'envisage d'utiliser le texte ou MEDIUMTEXT comme le type de champ pour les données réelles. Mais, je suis préoccupé par l'utilisation de la RAM lors de l'exécution des requêtes. Quand je lance une requête pour les données, sera MySQL assez intelligent pour allouer uniquement la mémoire nécessaire pour les données sur le terrain (même si elle est un petit entier) ou sera affecter le montant total autorisé pour le champ MEDIUMTEXT?

Par ailleurs, est-il une meilleure façon que vous pouvez penser en ce qui concerne le stockage des données pour une base de données dynamique comme ça?

Amy

Était-ce utile?

La solution

Oui, vous créez vos objets de table pour stocker ces grands champs de texte, essayez d'utiliser la compression dans vos tables. Il sonne comme un ajustement parfait, si vous avez le plugin InnoDB activé.

http: // dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-compression-tuning-when-data.html http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-compression-usage.html

Une définition de table simple pour vos réponses pourrait être quelque chose comme:

CREATE TABLE test_answers (
answer_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
test_id INT UNSIGNED,
question_id INT UNSIGNED,
answer_body TEXT,
PRIMARY KEY(answer_id, question_id)
) ENGINE=InnoDB
 ROW_FORMAT=COMPRESSED 
 KEY_BLOCK_SIZE=4;

Autres conseils

peut s'enfuir avec des champs de texte de taille modérée mais généralement plus agréable pour stocker de grands champs dans une table séparée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top