Ruby on rails 如果我缩短散列中每个键名的长度,会缩短该散列的读/写时间吗?

Ruby on rails 如果我缩短散列中每个键名的长度,会缩短该散列的读/写时间吗?,ruby-on-rails,ruby,benchmarking,Ruby On Rails,Ruby,Benchmarking,我正在构建一个大的散列(大约300000个键和值)。我想知道如果我有人类可读的密钥名,哈希的读/写处理时间是否会改变,比如::密钥的一些描述,其中一些大约是30个字符 或者缩短顺序数字系统的键会有好处吗(:0_1,:1_1,作为一个基本示例) 假设的优点是每个键的字符长度都要短得多。简言之,如果您的键当前是字符串、数字或符号,而不是对象,则会减小大小,但不太可能提高性能。如果您的密钥是一个模型或其他对象,我建议更改它,因为它会增加开销。如果我们谈论的是以下两者之间的区别: { my_very_l

我正在构建一个大的散列(大约300000个键和值)。我想知道如果我有人类可读的密钥名,哈希的读/写处理时间是否会改变,比如:
:密钥的一些描述,其中一些大约是30个字符

或者缩短顺序数字系统的键会有好处吗(
:0_1
:1_1
,作为一个基本示例)


假设的优点是每个键的字符长度都要短得多。

简言之,如果您的键当前是字符串、数字或符号,而不是对象,则会减小大小,但不太可能提高性能。如果您的密钥是一个模型或其他对象,我建议更改它,因为它会增加开销。如果我们谈论的是以下两者之间的区别:

{ my_very_long_key_or_something: “”}
Vs

然后保存的字节数等于减少的字符数。因此,对于300k记录,每个15个字符的保存量为4.29Mb。如果你正在处理内存不足的问题,并且这种节省是一种好处,那么就去做吧。我真的建议你把钥匙露出来,让它更容易理解

同样,如果您的密钥不是对象;读/写问题更可能与值的大小(对于对象或嵌套哈希)或应用于哈希的处理有关。您可以尝试使用基准测试将性能与以下各项进行比较:

Benchmark.ms { my_hash.process }

简言之,如果密钥当前是字符串、数字或符号而不是对象,则它将减小大小,但不太可能提高性能。如果您的密钥是一个模型或其他对象,我建议更改它,因为它会增加开销。如果我们谈论的是以下两者之间的区别:

{ my_very_long_key_or_something: “”}
Vs

然后保存的字节数等于减少的字符数。因此,对于300k记录,每个15个字符的保存量为4.29Mb。如果你正在处理内存不足的问题,并且这种节省是一种好处,那么就去做吧。我真的建议你把钥匙露出来,让它更容易理解

同样,如果您的密钥不是对象;读/写问题更可能与值的大小(对于对象或嵌套哈希)或应用于哈希的处理有关。您可以尝试使用基准测试将性能与以下各项进行比较:

Benchmark.ms { my_hash.process }

请记住,即使RAM很便宜,CPU缓存也总是有限的。根据Ruby的存储方式,如果fluff稀释了频繁访问的数据,那么一级/二级/三级缓存命中率就会降低。此外,散列较长字符串的速度可能稍慢,但如果实际编译的散列函数上有大量开销,那么它可能可以忽略不计。请记住,即使RAM很便宜,CPU缓存也总是有限的。根据Ruby的存储方式,如果fluff稀释了频繁访问的数据,那么一级/二级/三级缓存命中率就会降低。此外,散列较长的字符串可能会稍微慢一点,但如果实际编译的散列函数上有大量开销,那么它可能可以忽略不计。我看不到使用这些符号的任何好处,因为它们是无效的。e、 g.
:0_1(语法错误)
,并将它们用作“字符串符号”(
:“0_1”
)似乎是一种)访问起来会很烦人;b) 由于符号将被截留(可能永远不会依赖ruby版本),我看不出使用这些符号有什么好处,因为它们是无效的。e、 g.
:0_1(语法错误)
,并将它们用作“字符串符号”(
:“0_1”
)似乎是一种)访问起来会很烦人;b) 由于符号将被截留(可能永远不会依赖ruby版本),内存消耗会膨胀