Дорогие друзья,
наконец-то появилась свободная минутка пофлудить на лоре чтобы померять оверхед redis. То что что-то не так я сразу понял когда увидел «сырые» цифры производительности.
Итак, был вот такой код:
import redis
r = redis.Redis()
for x in xrange(1263138015,1263152415):
r.set("uptime_%s" % x, 1000)
r.set("memory_%s" % x, 1000)
r.set("cpu_%s" % x, 1000)
r.set("disk_%s" % x, 1000)
r.set("disk2_%s" % x, 1000)
r.set("disk3_%s" % x, 1000)
r.set("ping_%s" % x, 1000)
r.set("ping2_%s" % x, 1000)
r.set("swap_%s" % x, 1000)
r.set("la_%s" % x, 1000)
Не важно что это и для чего(конечно же велосипед :)), главное что оно на моём мощнейшем железе отрабатывает 20сек. Имхо это очень плохо.
Теперь используем dict для хранения ключей. Результат: 0.16 в тех же условиях. На лицо гейн в 125 раз :). При этом ещё может хранить объекты посложнее строк. В общем, как я и подозревал, расходы на сериализацию, ipc и переключение контекста очень большие.
Цена скорости это отсутствие некоторых фич. Самые важные на мой взгляд это репликация и то что база может быть одна для нескольких процессов, а dict сугубо embeeded.
Ну а сохранять базу в фоновом режиме на диск любой дурак может :). Мой страшненький код который позволяет дампить импровизированную базу в фоновом режиме через pickle: http://dpaste.com/hold/563439/ (вместе с тестами которые он не совсем проходит:)). Там ещё и траблы с английским, но заметил это как всегда после того как запостил, исправлять лень.
Чё сказать-то хотел... Да ничего, просто проснулась мания к графоманству :). Всяко полезнее чем обсуждать MD OS Ice.