質問

ここでは、ユーザー設定の保存に関するいくつかの質問を見ましたが、それらは主にかなり最小限の設定のセットを指しているようです。現在、高度にカスタマイズ可能なWebアプリの開発に取り組んでおり、多数の設定を保存する必要があり、それらの保存方法に苦労しています。

保存する設定には、特定のツールチップを表示するためのブール値、ページ上のさまざまなコンテンツパネルの配置、ログイン後に表示するページ、特定のフォームフィールドのデフォルト値などが含まれます。各ユーザーにはこのタイプの50以上の設定があり、データは主にブール値と整数になると予想しています。

私はシリアライゼーションの大ファンではありませんが、各設定を個別の行として保存するスケーラビリティについて心配しています。思考?

役に立ちましたか?

解決

データの塊をシリアル化することはここに行く方法ですが、パフォーマンス上の理由のためではありません-むしろこれは膨大な数の変更を見る可能性が高いシステムの側面であるためです。あるページなどで高度なモードを有効にする設定を許可する必要があるという理由だけで、DBスキーマを変更する必要はありません。

HLGEMが言及しているエンティティ属性値モデルは、「進化しやすい」からのこれに適合しています。しかし、彼が言うように、それは非常にパフォーマンスが悪いでしょう。

シリアル化されたオブジェクトをあきらめるのは、特定のパターンに一致するユーザーのdbを直接クエリする機能です(おそらく、設定のいくつかの組み合わせでのみ発生するバグを追跡していて、その組み合わせを持つユーザーがいます)。

他のヒント

このためにentity-attrivute-value構造の使用を避けることは何でも( http: //en.wikipedia.org/wiki/Entity-Attribute-Value_model )。非常にパフォーマンスの低いシステムが必要な場合を除きます。 50列の1つのテーブルへの呼び出しは、必要なすべての情報を取得するために50回結合する必要がある1つのテーブルへの呼び出しよりもはるかに高速になります。

設定の一般的なグループ(ログイン設定、サイト全体の設定、特定のページまたは機能の設定)ごとに関連テーブルを作成します(設定をクエリする方法に基づいて(ログイン時にすべてを元に戻したい場合)副は、ログイン時にサイト全体に必要なものと、ユーザーがそれらをヒットしたときに特殊な領域にのみ必要なものを引き出しますので、その組み合わせで設定の種類のブール列があります。そうすることで、サイトの各エリアに必要なすべての設定が同じテーブルまたは最大2つまたは3つのテーブルになり、情報を比較的簡単に取得できます。これは、デザインがパフォーマンスにとって重要な1つの場所です(常にミリ秒がカウントされるように設定を検索するため)ので、デザインのパフォーマンスを最初に考慮する必要があります。ここでは、これをオブジェクト指向のように見せたい、または開発者が設定する作業を少なくしたいという願望よりもはるかに重要です。

ユーザー設定などの情報をデータベースに保存するかどうかもわかりません。ユーザーがログインするとすぐに、多くの(すべてではないにしても)ユーザー設定を確認する必要があるようです。大量のdbクエリを実行すると、システムは非常に遅くなります。代わりに、ユーザーの設定すべてを単一のファイル(またはどこかの単一のレコード)に保持し、ユーザーがログインしたらすぐにそれを飲み込んでキャッシュすることをお勧めします。

ユーザーデータが既にデータベースに格納されていると仮定すると、特にデータに基づいてクエリを実行する必要がある場合など、すべてを1行に格納することに実際の問題はありません。優先度AまたはBなどを持つすべてのユーザーを選択します。

ただし、クラスにロードし、何らかのキャッシュメカニズムを介してそのクラスを永続化します。

設定を検索する必要がない場合は、常に設定をXMLとして保存し、「設定」に保存できます。カラム。将来的に新しい設定を追加するのが少し簡単になるはずです;)

別のオプション(たとえば、アイテムの統計情報(誰が何をするかなど)をチェックするためにアイテムをDBに保存する必要がない場合)は、すべての設定をCookieに保存して保存できます彼らのマシンで。

もちろん、CookieにはCookieの使用に関するすべての注意事項があります。ただ別のアイデア...

ユーザーがより好む特定の設定があります(すべての動物は同等ですが、一部の動物は他の動物よりも同等です)。これらは、ログイン時のインターフェイスでの取得およびアプリケーション用に特に最適化する必要があります。優先度が下がると、任意の基準を使用して集計し、おそらく配列として個別の列として保存できます(たとえば、フォントの優先度列には、フォントの種類、サイズ、色が含まれ、フォントテーブルを参照します)。また、dbツールと再設計を使用して、頻繁に使用される列にインデックスを付けて、集約列を分割し、集約内のどの要素が需要が高いかを識別できるようにします。

すべてのユーザー設定のすべては、非常に静的である傾向があります(つまり、習慣のようです)。ユーザーデータと設定をより高度に変更できるように混同しないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top