我正在尝试尽快将大量数据加载到Redis中.
我的数据如下:
771240491921 SOME;STRING;ABOUT;THIS;LENGTH
345928354912 SOME;STRING;ABOUT;THIS;LENGTH
Run Code Online (Sandbox Code Playgroud)
左侧有一个~12位数字,右侧有一个可变长度字符串.键将是左侧的数字,数据将是右侧的字符串.
在我刚刚开箱即用的Redis实例中,以及带有此数据的未压缩纯文本文件,我可以在一分钟内获得大约一百万条记录.我需要做大约4500万,这需要大约45分钟.45分钟太长了.
我是否存在一些标准的性能调整来进行这种类型的优化?通过分割不同的实例,我会获得更好的性能吗?
我发现自己一直在做这种事情.我一直在考虑编写一个宏/函数来使这种事情更容易,但我发现我可能正在重新发明轮子.
是否有现有的功能可以让我更简洁地完成同样的事情?
(defun remove-low-words (word-list)
"Return a list with words of insufficient score removed."
(let ((result nil))
(dolist (word word-list)
(when (good-enough-score-p word) (push word result)))
result))
Run Code Online (Sandbox Code Playgroud) 我有许多需要相同范围的模型.它们每个都有一个expiration_date我想写一个范围的日期字段.
为了保持DRY,我想将范围放在一个模块(在/ lib中)中,我将扩展每个模型.但是,当我scope在模块内调用时,该方法是未定义的.
为了解决这个问题,我在使用class_eval模块时使用:
module ExpiresWithinScope
def self.extended(base)
scope_code = %q{scope :expires_within, lambda { |number_of_months_from_now| where("expiration_date BETWEEN ? AND ?", Date.today, Date.today + number_of_months_from_now) } }
base.class_eval(scope_code)
end
end
Run Code Online (Sandbox Code Playgroud)
然后我extend ExpiresWithinScope在我的模型中做.
这种方法有效,但感觉有点hackish.有没有更好的办法?