私はレガシー アプリに取り組んでいます。現在、管理者がカスタム フィールドを含むフォームを生成できるようにしています (フィールドの作成、入力タイプの選択、ラベルの選択など)。
ユーザーがこのカスタム フォームに入力すると、そのフォームのすべてのフィールドがチェックされます。そのフィールドが users テーブルの列でない場合は、users テーブルに列として追加します。
たとえば、管理者が「フライト到着時間」というフィールドを追加した場合、「flight_arrival_time」という列を users テーブルに追加し、User モデルには @user.flight_arrival_time という属性が含まれます。
この現在の行動方針に代わるものは何ですか? これらの値を保存するより効率的な方法はありますか?
制限の一部を次に示します。
私たちには何万人ものユーザーがいます (これらの属性を別のテーブルに保存してそれらを結合すると、システムが非常に遅くなると言われました。多くの場合、約 20 人ほどの管理者がクエリ、インポート、更新、および一般的に地獄を使用しています)私たちのシステムは、負荷がかかるとすでにかなり遅いです. 私は、「{X} をもっと購入して、高速化できるようにする. .属性名、属性値 各ユーザーに追加の 15 の属性があり、100,000 人のユーザーがいる場合、どのくらい遅くなるでしょうか?
ストレージは簡単にクエリできる必要があります (ユーザーが User モデルから任意の列を検索フィールドとして選択し、入力された値を見つけることができるようにする動的検索を使用します)。簡単なクエリを許可しますか (たとえば、「フライト到着時間」という名前の属性が明日であるすべてのユーザーを検索します)。これも非常に遅くなりますか?
少し実験して、提案されたスキーマのいくつかを生成し、100,000 人のユーザーとそれぞれに 20 の属性を生成し、いくつかのテスト クエリを実行して実行時間を確認しますが、どこから始めればよいかについての情報が欲しいです。
ご意見ありがとうございます。