【问题标题】:Why does Redis Hash Bucket saves disk?为什么 Redis Hash Bucket 会节省磁盘?
【发布时间】:2014-07-14 14:50:25
【问题描述】:

我读了这个博客:http://instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-value-pairs

Instagram 家伙做得非常出色,并详细说明了如何保存磁盘。但是,我想要一些详细的原因,为什么 zipmap 哈希桶可以节省内存?是不是因为不需要分配很多long类型而只需要int类型?

谢谢你们。

【问题讨论】:

  • 我意识到这是一个老问题,但我发现 Instagram 的博客文章真的很有帮助。我现在正在做类似的事情,链接现在已经死了。如果有人知道新位置或有 PDF 版本,我将不胜感激。

标签: redis zipmap


【解决方案1】:

这里要理解的主要是指针占用大量空间。如果您要序列化一个哈希并将其保存为 无键值指针 的字符串,您将节省大量空间,因为您将从每对的指针变为 0 指针。

Redis 是一种内存数据存储,它希望在不严重影响性能的情况下帮助您尽可能多地节省空间。为了实现这一点,它将保持小散列简单地序列化,并在执行散列操作时完全搜索它们。实际上这是 O(n),但由于散列很小,因此在节省大量内存的同时不会影响性能。一旦散列变大,Redis 会将其转换为实际散列,它将开始占用更多空间,但现在有常规散列 O(1) 查找、写入、删除时间。 Redis provides the "hash-max-zipmap-entries" setting among many similar settings to let you configure exactly where this conversion point is. 因此,Instagram 工程师发现他们可以将此转换点设置为高于默认值,以节省更多空间,但代价是更高的 CPU 负载。对他们来说,这是一个很好的权衡。我强烈推荐阅读here 了解更多信息。

【讨论】:

  • 谢谢伊莱。这是一个很好的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
相关资源
最近更新 更多