我读了这个博客:http: //instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-value-pairs
Instagram 的家伙做得非常好,并详细说明了如何保存磁盘。但是,我想要一些详细的原因,为什么 zipmap 哈希桶可以节省内存?是不是因为你不需要分配很多 long 类型而只需要 int 类型?
谢谢你们。
我读了这个博客:http: //instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-value-pairs
Instagram 的家伙做得非常好,并详细说明了如何保存磁盘。但是,我想要一些详细的原因,为什么 zipmap 哈希桶可以节省内存?是不是因为你不需要分配很多 long 类型而只需要 int 类型?
谢谢你们。
这里要理解的主要是指针占用了大量空间。如果您要序列化一个哈希并将其保存为没有键值指针的字符串,您将节省大量空间,因为您将从每对的指针变为 0 指针。
Redis 是一个内存数据存储,它希望在不严重影响性能的情况下帮助您尽可能多地节省空间。为了实现这一点,它将保持小散列简单地序列化,并在执行散列操作时完全搜索它们。实际上这是 O(n),但由于散列很小,因此在节省大量内存的同时不会影响性能。一旦散列变大,Redis 会将其转换为实际散列,它将开始占用更多空间,但现在有常规散列 O(1) 查找、写入、删除时间。Redis 在许多类似设置中提供了“hash-max-zipmap-entries”设置,让您可以准确配置此转换点的位置。因此,Instagram 工程师发现他们可以将此转换点设置为高于默认值,以以更高的 CPU 负载为代价节省更多空间。对他们来说,这是一个很好的权衡。我强烈建议您阅读此处以获取更多信息。