Created
February 18, 2015 03:42
-
-
Save itamarhaber/6c9f3dd75ec5e25d8044 to your computer and use it in GitHub Desktop.
Benchmark different pre-ordered sorted sets insertion times to win the bounty at http://stackoverflow.com/questions/28499034/most-efficient-way-to-insert-an-already-sorted-set-into-redis
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import redis | |
import random | |
import timeit | |
key = 'so_bounty' | |
number = 100 | |
sample = 10000 | |
r = redis.Redis() | |
def ascset(): | |
s = [] | |
for i in range(sample): | |
s.append('value:' + `i`) | |
s.append(i) | |
return s | |
def dscset(): | |
s = [] | |
for i in range(sample,0,-1): | |
s.append('value:' + `i`) | |
s.append(i) | |
return s | |
def rndset(): | |
s = [] | |
for i in range(sample): | |
s.append('value:' + `i`) | |
s.append(random.randrange(sample)) | |
return s | |
def zeroset(): | |
s = [] | |
for i in range(sample): | |
s.append('value:' + `i`) | |
s.append(0) | |
return s | |
if __name__ == '__main__': | |
stmt = "i = i + 1; r.zadd(key + ':' + `i`, *s)" | |
setup = ("from __main__ import r; " + | |
"from __main__ import key;" + | |
"from __main__ import sample;" + | |
"r.flushdb(); " + | |
"i = 0; " + | |
"from __main__ import {};" + | |
"s = {}();") | |
print("ascending order") | |
print(timeit.timeit(stmt=stmt, setup=setup.format("ascset", "ascset"), number=number)) | |
print("descending order") | |
print(timeit.timeit(stmt=stmt, setup=setup.format("dscset", "dscset"), number=number)) | |
print("random order") | |
print(timeit.timeit(stmt=stmt, setup=setup.format("rndset", "rndset"), number=number)) | |
print("0 score") | |
print(timeit.timeit(stmt=stmt, setup=setup.format("zeroset", "zeroset"), number=number)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment