LINUX.ORG.RU
ФорумAdmin

NoSQL с integer типом


0

1

Начал присматриваться к Redis. Красивое описание, даже репликация есть, она пока что не нужна, но кто знает. С первого взгляда то, что надо.

А надо обновлять базу на три десятка миллионов ключей. Обычные key-value. Средняя ожидаемая нагрузка - 30К GETSET в секунду. Желательно при этом не сожрать много оперативной памяти, есть на то причины. В случае сбоя допустимо потерять небольшую часть последних значений, но основная масса должна остаться, то есть должно идти относительно постоянное сохранение данных на диск.

90% значений этих ключей можно описать, как integer(4) или integer(8). А число 1234567, представленное в виде integer, явно занимает в памяти значительно меньше места, чем представленное в виде char.

И тут в документации обнаруживается: in Redis there are not «integer» types, любой integer там обычная строка. Попробовал позаполнять - на миллион пар ключ/значение уходит больше двухсот метров памяти. С такой математикой 30М записей будут стоить 6ГБ.

Поэтому советуюсь. Стоит ли ещё на что-то посмотреть, или надо просто не скупиться на память? И какие вообще есть мнения о Redis?

По расходу памяти они все будут примерно одинаковы и примерно в описаных тобою порядках

могу лишь порекомендовать использовать в редисе virtual-memory

Borman3000
()
Ответ на: комментарий от Borman3000

Но это же получается в среднем по двести байт на каждую пару значений! Проверил, у меня перловые хэши занимают столько же.

Кстати, ещё 5% у меня будут занимать вообще булёвые значения. 0 или 1. Тоже по двести байт на каждую пару отдавать? :-)

a_eto_on
() автор топика

ещё вопрос

Может, чего-то просто не понимаю.

Сделал flushdb, освободил два с лишним гига памяти. info даже показывает used_memory:63774420 used_memory_human:60.82M

однако в ОС память не вернулась. И процесс redis-server как жрал два с лишним гига памяти, так и продолжает жрать.

Когда мне память вернут?

a_eto_on
() автор топика

конверти integer в бинарную строку. Тогда будет поменьше.

true_admin ★★★★★
()

вообще это косяк, конечно (:. Хотелось бы видеть некоторые типы данных.

true_admin ★★★★★
()

NoSQL, NoSQL... А может и не нужен мне никакой NoSQL?

Только что в PostgreSQL сделал табличку, аналогичную key-value для своих задач:

CREATE TABLE tmp_nosql_speedtest_char (
                id varchar(12) PRIMARY KEY,
                result bigint DEFAULT '0'
);
И безо всякой магии выжал 30К пар селект+апдейт в секунду (то есть, всего запросов получилось 60К в секунду). Запускал в пятьдесят потоков на десяти миллионах записей. И места на диске эти десять миллионов записей занимают (конечно, после вакуумов и реиндексов) всего семьсот мегабайт.

a_eto_on
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.