Ruby哈希键:时间/时间戳或符号?

时间:2014-12-04 10:20:03

标签: ruby string timestamp hashtable symbols

我有一个包含基于时间(键)和字符串数据值的ruby哈希值(可能很大)。

def time_now
  Time.now.utc.iso8601(3)
end  

time_1 = time_now #=> "2014-12-04T10:05:07.852Z"
data_1= "{\"data\": \"some possibly big json data as string\"}"

h = { time_1 => data_1, ... } 

所以在我的应用程序中(顺便说一句,这里是完整的代码:http://github.com/solyaris/pere)我用作ISO8601字符串时间戳的键。

那可能还可以,但是......

由于某些原因,我必须在运行时选择哈希项的子集;这意味着关键字符串比较:

h.select { |key, value| key > some__string_timestamp }

因此,要进行一些内存优化和更快的执行,可能STRINGS作为密钥并不是最佳解决方案。

我想到了使用符号:

time_1_key_as_symbol = time_1.intern

但在这里我遇到了一个问题:考虑哈希可能包含大量的键项(这些是实时的时间戳" cluster" events ...),只有符号作为键,可能会产生内存溢出问题是因为Ruby上的符号缺少垃圾收集(如果我很好理解,请参阅:Why use symbols as hash keys in Ruby?

所以我总结说,可以更好地(为了更快的比较和内存优化)使用内部Ruby Time内部格式(Ruby版本2.1的64位?)而不是字符串:

time_1_as_ruby_time = Time.iso8601 time_1

正确吗?你怎么看?

0 个答案:

没有答案