Почему Redis Hash Bucket сохраняет диск?
Я читаю этот блог: http://instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-value-pairs
Ребята из Instagram отлично справляются с работой и разрабатывают, как сохранить диск. Тем не менее, я хочу получить детальную причину, по которой корзина хешей zipmap может сэкономить память? Это потому, что вам не нужно выделять много длинных типов, а вместо этого нужен только тип int?
Спасибо, ребята.
1 ответ
Здесь главное понять, что указатели занимают много места. Если бы вам нужно было сериализовать хеш и сохранить его как строку без указателей значения ключа, вы бы сэкономили тонну пространства, потому что переходили бы от указателя для каждой пары к 0 указателям.
Redis - это хранилище данных в оперативной памяти, которое хочет помочь вам сэкономить как можно больше места, при условии, что оно может делать это без серьезного влияния на производительность. Для этого он будет сохранять сериализацию небольших хешей и выполнять их поиск в любое время, когда выполняется операция хеширования. На самом деле это O(n), но поскольку хеш небольшой, это не влияет на производительность при сохранении большого количества памяти. Как только хэш станет большим, Redis преобразует его в реальный хэш, и он начнет занимать гораздо больше места, но теперь имеет регулярный хэш O(1) для поиска, записи, удаления времени. Redis предоставляет настройку "hash-max-zipmap-records" среди многих похожих настроек, чтобы вы могли точно указать, где находится эта точка преобразования. Итак, инженеры Instagram выяснили, что они могут установить эту точку преобразования выше, чем значение по умолчанию, чтобы сэкономить больше места за счет более высокой загрузки процессора. Для них это был хороший компромисс. Я настоятельно рекомендую прочитать здесь для получения дополнительной информации.