簡體   English   中英

高效和跨平台的方式來存儲任意排序順序?

[英]Efficient and cross-platform way to store arbitrary sort order?

我目前正在開發一個Android應用程序,用戶可以通過拖放操作以自己想要的任何順序對其列表進行排序。 因此,我必須將排序順序存儲在變量和列中。 我正在考慮給每行一個數字,例如100000、200000、300000等,如果用戶在100000和200000之間移動項目,則其排序編號將成為其鄰居的平均值,即150000。因此,數字越遠,當排序數字相互融合時,我不得不“重置”排序數字的次數減少了

我擔心一些事情:

  1. 首先是什么最有效? 大量使用更多資源還是需要更長的時間進行排序? 我只希望有大約40行,因此,如果要花費大量時間對大量數字進行排序,最好使用較小的數字並更頻繁地“重置”。

  2. 其次是確保將來的跨平台兼容性。 就目前而言,我只需要擔心與我的Android應用程序一起使用,該應用程序使用Java和SQLite,它們的最長長度為2 ^ 63-1。 但是將來,我可能會擔心諸如在使用Objective C的iOS應用與Web客戶端之間進行同步等問題。 我對這些技術並不熟悉,因此如果有人指出我可能會遇到的任何交叉兼容性問題以及現在如何防止它們,這樣一來我以后就不必進行修改,這將對您有所幫助。

謝謝

編輯:對不起,我忘了提及這一點,但是另一個我不想每次都以遞增的排序順序更新所有行的原因是因為不僅我必須保存到本地數據庫,而且還必須同步所有更新的更改到BAAS。 許多BAAS(例如Parse和Kinvey)(即時通訊使用什么)都不允許您批量保存對象,因此,每次我“重置”所有排序順序時,我都必須向我的BAAS每行(而不是一個行)發出請求。

您可以堅持將SortOrder分隔為1。 我認為您擔心必須對大量的行執行更新,但是如果您對SortOrder索引將不會有問題。 它們都會非常快速地更新。

我想您會驚訝於查詢速度如此之快

UPDATE TableName SET SortOrder = SortOrder + 1 WHERE SortOrder > {InsertLocation + 1};

將與您的SortOrder列上的索引一起運行。 如果您有大量數據而沒有索引,則會注意到查詢將花費更長的時間。 自己試試吧!

關於跨平台SQLite支持,iOS和Web都支持SQLite,因此您在那里應該不會有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM