2017-09-13 17 views
0

クライアントの表示順序を追跡するプロパティをデータストアに格納したいとします。しかし、クライアントはエンティティを移動することができ、表示順序を更新する必要があります。REST APIで表示順序を保存および更新するためのベストプラクティスは何ですか?

私が考えることができる最も明白な解決策は、エンティティと同じシーケンスで表示順序を整数として保存することです。この解決策の問題点は、最後のアイテムをどこに移動して最初に配置すれば、リスト内のすべてのアイテムを更新する必要があるということです。

私が考え出すことのできる別のアイデアは、1000、2000、...、100 000のようなギャップを持つシーケンスとして表示順序を格納することです。エンティティを移動するとき、表示値を常に中間値として与えます表示値1000と2000のエンティティ間にエンティティを配置する場合は、表示値1500を指定します。このソリューションでは、移動しているエンティティを更新するだけで済みますが、 2つのノード間の数字が足りなくなった場合、より多くのエンティティに影響を及ぼす何らかの並べ替えを行わなければなりません。あなたはそのギャップを非常に大きくして、ほとんど起こらないようにすることができます。

この問題を解決するためのベストプラクティスはありますか?

答えて

0

(常に1ページだけでなく)完全なリストを表示する必要がある場合は、リスト内の次のアイテムのみを追跡することができます。あなたの例では、最後の項目が最初の項目を「指す」べきであり、最後の項目がもう何も「指す」べきではないことを意味します。また、リスト内の最初の実際のアイテムを指し、簡単に見つけることができる何らかのダミーアイテムを持たせることもできますし、他の方法で最初のアイテムを追跡することもできます。したがって、すべてのアイテムを取得し、メモリ内でそれらを並べ替えます。

リストがページに表示されている場合、上記の解決策は実用的ではありません。これは、指定された時間にリストの一部のみがデータベースから取得されることを意味します。

+0

あなたが動いているエンティティとそれを後に置いているエンティティを少なくとも更新する必要があります。少なくとも複数のエンティティを更新する必要があります。 上記のソリューションがページングで機能しない理由がわかりません。 –

+0

@DavidBergリスト全体を一度に読み込んでからページに表示すると、ソリューションが機能します。しかし、アイテムの1ページだけをロードしたい場合は、そのページの開始位置を簡単に見つける方法はありません。 – Dialecticus

+0

うーん、私はページングの実装がどのように行われているかによって異なります。あなたがアイテムを別のページに移動しようとしている場合は、それが問題となる唯一の時間です。その場合は、そのページも取得する必要があります。または私はここに何かを逃していますか? –

関連する問題