将已排序的集合插入REDIS的最有效方法

时间:2015-02-13 11:54:20

标签: redis time-complexity sortedset skip-lists

我在内存中已经有一个已经排序的大小(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?

2 个答案:

答案 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成员的有序集合:

  • 首先:196.29s | 1146.43s | 9897.29s
  • 尾巴首先:170.14s | 993.43s | 9722.14s
  • rand insert:146.00s | 1014.57s | 9968.57s

所有具有足够的可变性(标准开发者分别为7.8 | 54.5 | 324.5),因此差异不足以得出结论。似乎并不重要...... :(