1
我保留{Key, Value}
數據在ETS ordered_set
其中Key
是日期時間。在內部[From, To]
的給定時間內選擇所有項目非常容易。ETS ordered_set和有效分頁
類似的東西:
ets:select(Tab, [{{'$1', '$2'}, [{'>=', '$1', From}, {'=<', '$1', To}], ['$2']}])
我們Limit
參數select()
功能,使我們能夠限制一些項目被選中。但是我怎樣才能指定一個偏移?
作爲輸入,我的模塊接收時間間隔和頁碼。我的目標是按指定的時間間隔和頁面返回項目。頁面大小(Limit
)是一個常量。我可以計算偏移量爲
Offset = Limit * PageNumber - Limit
問題是如何纔能有效地爲給定頁面選擇項目?
我知道select()
功能可以收到Continuation
參數,但是我從前面的選擇中沒有任何狀態。我只有一個頁碼。
可能,我必須使用其他數據結構。請推薦更好的解決方案。
是否有任何替代數據結構在O(logN)中做這樣的選擇?也許gb_trees? – Stas
@Stas:如果您將使用'next' +'lookup'羅伯特的建議,您將以與任何其他O(logN)結構相同的結果結束。唯一的缺點是您需要在頁面上存儲最後一個鍵以進一步移動。 –
@Stas:'ordered_set'是O(log N),與gb_trees一樣。 Gb_trees允許您跨過桌面,但只能從開始處開始。你的桌子有多大?這將決定哪些數據結構對您來說是實用的。 – rvirding