Tag: 性能

Redis或Mongo确定一个数字是否在范围内?

我需要一种快速检查IP地址是否属于许多禁用IP范围之一的方法。 我目前使用iptables来检查IP是否属于指定范围。 这适用于几千个范围,但这个数字将急剧增加到几十万,并将继续增长。 我目前简单地向iptables添加新规则的方法的另一个问题是重复数量的增加。 我需要一种有效的方法来检查IP或范围在添加到规则集之前是否属于现有(更大)范围。 Ruby是我最熟悉的语言,但对于越来越多的范围,哪种数据结构是最佳选择? 我想出的一个解决方案是使用Redis集或MongoDB将各个IP存储为整数,然后只需检查集合中是否存在IP ……但我的直觉告诉我必须有一个更聪明的方法。 如果我要将IP转换为整数并存储范围,那么运行范围以查看新IP或范围是否已经包含在现有更大范围内的最佳方式是什么? 最后要注意:速度比内存成本更重要。

何时在Ruby on Rails中使用memoization

2008年7月中旬,Memoization被添加到Rails核心。 这里使用的演示。 我还没有找到任何关于何时应该记忆方法的好例子,以及每个方法的性能影响。 例如, 这篇博客文章表明,通常不应该使用备忘录。 对于可能具有巨大性能影响的东西,似乎没有什么资源可以提供简单的教程。 有没有人看到他们自己的项目中使用的memoization? 哪些因素会让您考虑记忆方法? 在我自己做了一些研究之后,我发现在Rails核心内部使用了很多次memoization。 这是一个例子: http : //github.com/rails/rails/blob/1182658e767d2db4a46faed35f0b1075c5dd9a88/actionpack/lib/action_view/template.rb 。 这种用法似乎违背了上述博客文章的结果,发现备忘录可能会损害性能。