【发布时间】:2019-05-21 08:13:13
【问题描述】:
为了在数据库中加密和存储用户信息,我的 Rails 应用程序使用salt(每个用户)使用ActiveSupport::KeyGenerator 生成key。但是,generate_key 方法执行的默认迭代是2**16 [1]。在每次读取(用于解密)和写入(用于加密)时使用用户的 salt 执行密钥生成会降低我的应用程序的速度。
我发现如果salt 和用于密钥生成的length 保持相同,则ActiveSupport::CachingKeyGenerator 可以用于缓存密钥[2]。在内部,它使用Concurrent::Map [3] 来缓存密钥。使用 ActiveSupport::CachingKeyGenerator 提高了我的应用程序的性能,因为它并不总是生成密钥。
这会将我的应用程序的内存使用量增加到可能导致应用程序崩溃的程度吗?
参考文献:
【问题讨论】:
-
真的吗?你有多少用户?键并没有真正占用那么多空间..
-
我们有大约一百万用户。
-
视情况而定。我建议对近乎真实的数据量使用内存分析,而不是依赖论坛意见:) 或许,不缓存所有内容也很有意义 - 用户的活动配置文件可能非常不同,并且有(粗略地说) 20% 的用户对您的基础架构造成 80% 的压力。仅缓存它们的键将通过合理的内存权衡减少性能问题...
标签: ruby-on-rails ruby encryption