2017-09-13 39 views
0

我們希望在一個數據存儲中存儲一個屬性,以跟蹤客戶的顯示順序。但客戶將能夠移動實體,然後我們需要更新顯示順序。在REST API中存儲和更新顯示順序的最佳做法是什麼?

我能想到的最明顯的解決方案是將顯示順序作爲整數以與顯示實體相同的順序存儲。這個解決方案的問題是,如果我們在哪裏移動最後一個項目並將其放在第一位,我們將需要更新列表中的所有項目。

我可以想到的另一個想法是將顯示順序存儲爲1000,2000,...,100000等空位的序列。當移動實體時,我們將始終將顯示值作爲中間值因爲如果我們希望在顯示值爲1000和2000的實體之間放置一個實體,我們會給它顯示值1500.通過這個解決方案,我們只需要更新我們正在移動的實體,但是如果我們用完兩個節點之間的數字,我們將不得不做出影響更多實體的某種重新排列。你可以使差距如此之大以至於幾乎不會發生。

有沒有解決這個問題的最佳做法?

回答

0

如果您始終需要顯示完整列表(不只是其中的一個頁面),那麼您只能跟蹤列表中的下一個項目。在你的例子中,這意味着最後一個項目應該「指向」第一個項目,而最後一個項目不應該「指向」任何東西。你也可以有一些虛擬物品指向列表中的第一個實際物品,你可以很容易找到,或者你可以用其他方式跟蹤第一個物品。所以你檢索所有項目,然後在內存中將它們整理出來。

如果列表以頁面形式顯示,則上述解決方案並不實際,這意味着在任何給定時間內只有部分列表是從數據庫中檢索的。

+0

好的,但有了這個願景,你至少需要更新你正在移動的實體,以及你正在放置的實體。至少比更新多個實體要好得多。 我不明白爲什麼上述解決方案不適用於尋呼? –

+0

@DavidBerg如果您一次加載整個列表,然後以頁面的形式顯示給用戶,那麼解決方案將起作用。但是如果你只想加載一頁的內容,就沒有簡單的方法來找出頁面開始的位置。 – Dialecticus

+0

嗯,我想這取決於如何完成尋呼。唯一一次它成爲一個問題,因爲我看到它是如果你要移動一個項目到另一個頁面。在這種情況下,您也必須抓取該頁面。或者我在這裏錯過了什麼? –

相關問題