假设您正在 Netflix 上重新排序队列中的项目。对于我见过的每一个这样的例子,当你将最后一项移到顶部时,它会更新数据库中的每条记录,一次一条。
1. One Fine Day ==> change sort order from 1 to 2
2. Two and a Half Men ==> change sort order from 2 to 3
3. Three Kings (move to top) ==> change sort order from 3 to 1
有一个更好的方法吗?也许每次您重新订购商品时只需要一次数据库更新?考虑一下:
1. One Fine Day ==> do nothing (sort order stays at 1)
2. Two and a Half Men ==> do nothing (sort order stays at 2)
3. Three Kings (move to top) ==> change sort order from 3 to 0
在其他两个项目之间移动一个项目将拆分排序顺序之间的差异:
1. One Fine Day ==> do nothing (sort order stays at 1)
2. Two and a Half Men ==> do nothing (sort order stays at 2)
3. Three Kings (move to mid) ==> change sort order from 3 to 2.5
更进一步,我们可以使用比数字更大的字符集,可能会使用 base64 并按字母顺序排序,这将使您在必须重新排序所有项目以保持项目之间的工作空间之前几乎可以无限使用。
无论如何,在求助时打你的数据库的最聪明的方法是什么?