我在内存中已经有一个已经排序的大小(N)并想要将其转储到redis中,如果首先插入头部或尾部,是否可以在O(N)中完成?或者无关紧要,插入will be O(log(N!)) ~ O(N log(N))
有关更多详细信息,redis排序集使用hashmap和skiplist(用于排序)实现。
编辑:这个问题仍然没有答案,因为相当多,或者至少答案对我来说有点模棱两可:Redis: Is ZADD better than O(logN) when the inserted element is at the beginning or end?
答案 0 :(得分:3)
以下是我"empirical" approach的结果,表明订购可能会有一些好处:)
(.venv)foo@bar:~/so_bounty$ python main.py
ascending order
5.57414388657
descending order
5.72963309288
random order
6.75937390327
0 score
5.79048109055
答案 1 :(得分:1)
在对另一种经验方法中使用的方法有疑问之后,我已经进行了自己的插入基准测试(所有集合在插入时间之前初始化,随机插入测试,在我们开始计时之前对元组列表进行洗牌)具有以下内容结果:
对于有2k,20k和200k成员的有序集合:
所有具有足够的可变性(标准开发者分别为7.8 | 54.5 | 324.5),因此差异不足以得出结论。似乎并不重要...... :(