为了快速处理静态数据设置,例如:服务器名称,”map“指令的值,MIME类型,请求头字符串的名称,nginx使用了hash表。在启动和重新加载配置阶段,考虑到存储键和值的hash表存储单元(hash bucket size )不能超过配置参数设定的值(hash bucket size参数),nginx将为hash表选择可能的最小值。hash表的尺寸是由”buckets“表示的。直到hash表吵过参数设置大小时,才会重新进行选择。大多数的hash有其对应的指令,这些指令允许改变它们的参数,例如:对于”服务器名称的hash“,可通过指令:”server_names_hash_max_size&server_names_hash_bucket_size“来约束。
hash bucket size参数大小被设置为处理器高速缓存区大小的整数倍。这样做的目的是为了加速现代处理器上hash表中key的检索速度,通过减少了内存的存取数。如果hash bucket size等于一个处理器高速缓存区大小(真实设置是整数倍,并非是一倍),那么在搜索key时,内存的存取数最坏的情况下将会等于2,首先,计算bucket地址,其次,在bucket中搜索指定的key。因此,如果nginx发送消息,需要增加 hash max size 或者 hash bucket size,那么首先需要增加第一个参数的大小!
总结:
这东西确实有点不知所云,尤其是英文翻译过来。得说明几点,也不知道自己理解的对不对:
1.hash表的最小存储单元,应该是上面的 ”hash bucket size“(也不知道咋翻译)
2.很多hash相关指令,都具有对应的2个配置指令:“hash_max_size” 和 “hash_bucket_size”。其中 “hash_max_size”为hash表的最大值,“hash_bucket_size”为hash表的存储单元的尺寸。
3.“hash_bucket_size” 应该是被设置为 “处理器高速缓存区大小” 的整数倍(至少是2倍?),为了加快检索速度