4

私は、ユーザーがWebフォームに質問を動的に追加できるようにするアプリケーションに取り組んでいます。私たちはバックエンドとしてMySQLを使用しており、フォームデータを保存するための最速で最も効率的な方法を見つけようとしています。

以前は、フォームセクションごとに個別のテーブルにデータを保存していました。列には、動的な質問をその保存場所にマップできるシステムに従って名前が付けられました。欠点は、ストレージマッピングシステムの設計が不適切であり、既存のデータを使用してフォームを変更することは悪夢でした。また、行ごとのメモリに関するMySQLの制限により、セクションごとに持つことができる質問の数が制限されていました。

したがって、すべてのフォームデータを含めるために単一のテーブルを使用することを検討しています。エッセイの質問が許可されているので、実際のデータのフィールドタイプとしてTextまたはMediumTextを使用することを検討しています。しかし、クエリを実行するときのRAMの使用量が心配です。データのクエリを実行すると、MySQLはフィールドのデータに必要なメモリのみを割り当てるのに十分賢いのでしょうか(小さい整数であっても)、それともMediumTextフィールドに許可されている全量を割り当てますか?

さらに、このような動的データベースのデータを保存することに関して、あなたが考えることができるより良い方法はありますか?

エイミー

4

2 に答える 2

1

はい、これらの大きなテキストフィールドを格納するためのテーブルオブジェクトを作成するときは、テーブルで圧縮を使用してみてください。InnoDBプラグインを有効にしている場合は、ぴったりのように聞こえます。

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

回答の簡単なテーブル定義は次のようになります。

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;
于 2010-09-30T20:21:18.270 に答える
0

適度なサイズのテキストフィールドでうまくいくかもしれませんが、一般的に大きなフィールドを別のテーブルに保存する方が良いでしょう。

于 2010-09-30T19:55:44.923 に答える