0

特定のオブジェクトを任意の順序で(ユーザーが自由に指定して)保持する必要がありますが、どちらが最善のアプローチかわかりません。

エンティティに整数の順序フィールドを設定してユーザーに順序付けさせることを考えていましたが、3つのサーバーがリクエストをディスパッチしているため、このアプローチでは問題が発生します。データベースで順序を更新すると、更新が強制されると思います。その順序に基づいて計算を行うたびに、エンティティをマージします。

もう1つのアプローチは、IMDGまたはキャッシュを使用して共有の場所に順序を設定し、そのような場所にそれらの計算を照会することですが、これはそのようなタスクにはやり過ぎだと思います。

どちらが最善のアプローチでしょうか?それとも他ですか?

4

2 に答える 2

1

整数オーダー欄での方法も可能です。次に、データベースにバージョン列も追加します (おそらく既に持っているでしょう)。1 人のユーザーが注文を変更すると、新しい注文番号を持つすべてのレコードを保存する必要があります。バージョン列により、他のユーザーは、変更された順序のためにデータをリロードする必要があることが通知されます。整数の代わりに、小数点以下の数字または文字列を使用することもできます。どちらも、テーブル内のすべての行を更新するのではなく、順序が実際に新しい場所にある行のみを簡単に更新できます。

この方法の不便さは、別のユーザーが順序を変更したという理由だけで、ユーザーが行をリロードする必要がある (つまり、実際の変更をやり直さなければならない) ことです。この状態がめったに起こらない場合は、それを受け入れることができますが、順序の変更が頻繁に発生する場合、これは受け入れられない可能性があります。

この不便さを避けるために、注文専用の別のテーブルを作成できます (列として注文番号、データ テーブルのキー、およびバージョン列として)。このテーブルは、データ テーブルと 1:1 の関係にあります。順序が変更された場合、このテーブルのみを更新する必要があります。つまり、他のユーザーがレコードのデータを変更するときに煩わされることはありません。この場合、さまざまな順序を実現することもできます (たとえば、すべてのユーザーが独自の順序を定義できます)。これにより、データ テーブルとの関係が 1:1 から n:1 に変更されます。

パフォーマンスの問題がある場合、またはデータベースに注文を保持する必要がない場合 (注文は 1 つのセッションでのみ有効です) にのみ、共有場所にキャッシュします。

于 2012-10-02T10:19:39.943 に答える