オンライン調査を行うためのソフトウェアを開発しています。多くのユーザーが同時にアンケートに回答している場合、データベースの高い書き込み負荷を処理する際に問題が発生します。調査データを格納するための現在のテーブル (MySQL、InnoDB) には、次の列があります: dataID、userID、item_1 .. item_n。item_* 列には、特定のアイテムで取得されたデータのタイプに対応するさまざまなデータ タイプがあります。ほとんどの項目列は TINYINT(1) ですが、いくつかの TEXT 項目列もあります。大規模なアンケートには 100 を超えるアイテムが含まれる場合があり、100 を超える列を持つテーブルが作成されます。ユーザーは 1 回の http 投稿で約 20 項目に回答し、それに応じて対応する行を更新する必要があります。ユーザーは多くの項目をスキップする可能性があり、行に多くの NULL 値が発生する可能性があります。
書き込み負荷の問題に対する次の解決策を検討しています。多くの列を持つ 1 つのテーブルを用意する代わりに、使用するデータ型 (data_tinyint_1、data_smallint_6、data_text など) に対応するいくつかのテーブルを設定します。これらの各テーブルには、次の列のみが含まれます: userID、itemID、value (値列には、そのテーブルに対応するデータ型があります)。たとえば 20 個のアイテムを含む 1 つの http 投稿の場合、data_tinyint_1 に 19 行、data_text に 1 行を作成する必要がある場合があります (多数の列で 1 つの大きな行を更新するのではなく)。ただし、すべての項目について、(2 つのテーブル結合を介して) そのデータ型を決定する必要があるため、どのテーブルに新しい行を作成するかがわかります。私の zend フレームワーク ベースのアプリケーション コードは、このアプローチではより複雑になります。
私の質問:
- 私のソリューションは、重い書き込み負荷に適していますか?
- より良い解決策はありますか?