存储任意排序顺序的高效跨平台方式?

时间:2015-04-11 00:35:03

标签: android ios objective-c sqlite sorting

我目前正在开发一款Android应用,用户可以通过任意顺序拖放来订购列表。因此,我必须将排序顺序存储在变量和列中。我想给每一行提供100000,200000,300000等数字,如果用户在100000到200000之间移动一个项目,那么它的排序数就会变成其邻居的平均数,即150000.所以数字越远,我们必须在排序数量相互融合时“重置”排序数量的次数较少

有一些我担心的事情:

  1. 首先是什么是最有效的?大数字使用更多资源还是需要更长时间才能排序?我只期望~40行,所以如果大数字需要更长的时间来排序,我可能会更好地使用较小的数字和更频繁地“重置”。

  2. 其次是确保未来的跨平台兼容性。现在,我只需要担心这与我的Android应用程序有关,该应用程序使用Java和SQLite,其长度最大为2 ^ 63-1。但在将来,我可能不得不担心使用Objective C和可能是Web客户端的iOS应用程序之间的同步。我不熟悉这些技术,所以如果有人能指出我可能遇到的任何交叉兼容性问题以及我现在如何防止这些问题会有所帮助,所以我不必在以后修改我的内容。

  3. 由于

    编辑:对不起,我忘了提这个,但另一个原因我不想每次都用递增的排序顺序更新所有行是因为我不仅要保存到本地数据库,而且我必须同步对BAAS的任何更新更改。许多像Parse和Kinvey这样的BAAS(我正在使用的)不允许你批量保存对象,因此每当我“重置”所有排序顺序时,我必须向我的BAAS请求每行而不是一行。< / p>

1 个答案:

答案 0 :(得分:1)

你可以坚持将SortOrder分开。我认为您担心必须对大量行执行更新,但如果您对SortOrder进行索引,这将不会成为问题。他们都会非常快速地更新。

我认为你会惊讶于查询的速度有多快

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

将使用SortOrder列上的索引运行。如果您有大量数据且没有索引,您会发现查询将花费更长时间。亲自试试吧!

关于跨平台的SQLite支持,iOS和Web都支持SQLite,所以你不应该有问题。