1

私はレガシー アプリに取り組んでいます。現在、管理者がカスタム フィールドを含むフォームを生成できるようにしています (フィールドの作成、入力タイプの選択、ラベルの選択など)。

ユーザーがこのカスタム フォームに入力すると、そのフォームのすべてのフィールドがチェックされます。そのフィールドが users テーブルの列でない場合は、users テーブルに列として追加します。

たとえば、管理者が「フライト到着時間」というフィールドを追加した場合、「flight_arrival_time」という列を users テーブルに追加し、User モデルには @user.flight_arrival_time という属性が含まれます。

この現在の行動方針に代わるものは何ですか? これらの値を保存するより効率的な方法はありますか?

制限の一部を次に示します。

私たちには何万人ものユーザーがいます (これらの属性を別のテーブルに保存してそれらを結合すると、システムが非常に遅くなると言われました。多くの場合、約 20 人ほどの管理者がクエリ、インポート、更新、および一般的に地獄を使用しています)私たちのシステムは、負荷がかかるとすでにかなり遅いです. 私は、「{X} をもっと購入して、高速化できるようにする. .属性名、属性値 各ユーザーに追加の 15 の属性があり、100,000 人のユーザーがいる場合、どのくらい遅くなるでしょうか?

ストレージは簡単にクエリできる必要があります (ユーザーが User モデルから任意の列を検索フィールドとして選択し、入力された値を見つけることができるようにする動的検索を使用します)。簡単なクエリを許可しますか (たとえば、「フライト到着時間」という名前の属性が明日であるすべてのユーザーを検索します)。これも非常に遅くなりますか?

少し実験して、提案されたスキーマのいくつかを生成し、100,000 人のユーザーとそれぞれに 20 の属性を生成し、いくつかのテスト クエリを実行して実行時間を確認しますが、どこから始めればよいかについての情報が欲しいです。

ご意見ありがとうございます。

4

3 に答える 3

2

正確な答えではありませんが、この種のアプリは mongoDB のようなドキュメント指向のデータベース/NOSQL システムから多くの恩恵を受ける思います

このようなシステムは、設計上スキーマレスです。

2 セントを追加すると、ユーザーがスキーマを動的に変更できるようにすることは、そもそも RDBMS 環境では非常に危険なオプションのように思えます。ほとんど空の列が何千もあるテーブルになる可能性があり、レールは何千ものメソッドを持つオブジェクトをインスタンス化します。..そして、列を削除するとどうなりますか?

于 2013-02-06T19:29:16.980 に答える
1

長期的には、あなたが従うアプローチでは、データベースが非常に遅くなる可能性があります。ユーザーの動作に応じて列を追加すると、他のタプルの値がnullになるため、データベースのサイズが大きくなります。

ドキュメント指向データベースを使用することをお勧めします。mongodb、couchdb、cassandraなどのように。

于 2013-02-08T12:09:57.703 に答える