Firebase中有序列表的性能

时间:2012-11-20 02:32:09

标签: javascript firebase

如果我想在Firebase中维护一个有序列表,似乎最好的方法是手动为列表中的每个项目分配优先级。这意味着如果我从列表中插入或删除项目,我必须更新其后的所有项目的优先级。对于列表开头的项目,这意味着更新列表中的每个项目。在这种情况下是否有更好的数据结构或算法?

2 个答案:

答案 0 :(得分:4)

您可以通过适当设置元素的优先级来创建有序列表。列表中的项目按优先级排序,或者如果可以通过数值将优先级解析为数字。

如果要将项目插入现有列表的中间,修改现有项目的优先级将起作用,但效率可能会非常低。更好的方法是在要插入值的两个项目之间选择优先级,并为新项目设置该优先级。

例如,如果元素1的优先级为“a”,元素2的优先级为“b”,则可以在两者之间插入元素3,优先级为“aa”(或“aq”,“az”等) )。

根据我们的经验,大多数情况下,当您创建有序列表时,您不一定知道要预先插入项目的列表中的位置。例如,如果你正在为一个游戏创建一个Leader Board,你事先并不知道你想在列表中放置第3个新分数,而是你知道你想要将它插入任何10000分获得你的位置(可能恰好是第三位)。在这种情况下,只需将优先级设置为分数即可完成此操作。请参阅我们的领导板示例: https://www.firebase.com/tutorial/#example-leaderboard

答案 1 :(得分:0)

Ruby gem ranked_model有一个解决这个问题的有趣方法。它像许多其他“充当列表”实现一样使用位置整数,但它不依赖于重写每个位置移动的所有整数。相反,它将整数分开很远,因此每次更新可能只影响一行或两行。可能值得查看自述文件和代码,看看这种方法是否适合这里。