Redis 有序集成员大小和性能
Redis Sorted Set Member Size and Performance
Redis Sorted Sets 主要基于分数进行排序;但是,在多个成员共享相同分数的情况下,将使用字典顺序 (Alpha) 排序。 Redis zadd 文档表明函数复杂度为:
"O(log(N)) where N is the number of elements in the sorted set"
无论成员如何,我都必须假设这仍然是正确的 size/length;但是,我有一个情况,只有 4 个分数导致成员在 Score 之后按字典顺序排序。
我想为每个成员添加一个时基键,以使次要排序基于时间,并为成员添加一些唯一性。类似于:
"time-based-key:member-string"
我的成员字符串可以更大 JavaScript 像这样的对象文字:
JSON.stringify( {/* object literal */} )
排序集 zadd 和其他功能的性能是否会保持不变?
如果不是,性能会受到多大程度的影响?
复杂性来自需要测试的元素数量(与新元素相比)以找到正确的插入点(大概使用二进制搜索算法)。
它没有说明执行每个测试需要多长时间,因为它被认为是一个常数因素(从某种意义上说,当您添加更多项目时它不会改变)。
在确定新元素应该位于现有元素之前或之后之前需要比较的数据量会影响总时钟时间,但每次比较都会同样如此。
因此,当仅比较分数时,插入的总时钟时间将是最快的,并且随着深入到它必须查找的一对字符串以确定其词法顺序,逐渐变慢。不过,这不会是任何特定的量级,只是要乘以 log(n) 复杂度因子的具体微秒数。
Redis Sorted Sets 主要基于分数进行排序;但是,在多个成员共享相同分数的情况下,将使用字典顺序 (Alpha) 排序。 Redis zadd 文档表明函数复杂度为:
"O(log(N)) where N is the number of elements in the sorted set"
无论成员如何,我都必须假设这仍然是正确的 size/length;但是,我有一个情况,只有 4 个分数导致成员在 Score 之后按字典顺序排序。
我想为每个成员添加一个时基键,以使次要排序基于时间,并为成员添加一些唯一性。类似于:
"time-based-key:member-string"
我的成员字符串可以更大 JavaScript 像这样的对象文字:
JSON.stringify( {/* object literal */} )
排序集 zadd 和其他功能的性能是否会保持不变?
如果不是,性能会受到多大程度的影响?
复杂性来自需要测试的元素数量(与新元素相比)以找到正确的插入点(大概使用二进制搜索算法)。
它没有说明执行每个测试需要多长时间,因为它被认为是一个常数因素(从某种意义上说,当您添加更多项目时它不会改变)。
在确定新元素应该位于现有元素之前或之后之前需要比较的数据量会影响总时钟时间,但每次比较都会同样如此。
因此,当仅比较分数时,插入的总时钟时间将是最快的,并且随着深入到它必须查找的一对字符串以确定其词法顺序,逐渐变慢。不过,这不会是任何特定的量级,只是要乘以 log(n) 复杂度因子的具体微秒数。