将SHA1哈希存储为二进制
将SHA1哈希存储为字符串的空间效率不高。作为字符串的SHA1至少需要40字节,一个额外的字节来存储编码,可能还需要更多的空间,这取决于PostgreSQL和MySQL的内部结构。
另一方面,如果要将SHA1存储为二进制,则只需要20字节的实际SHA1,以及1或4字节的额外空间(同样取决于数据库内部)。这意味着在最好的情况下,我们可以减少50%的空间使用。
为了使它更容易使用,您可以包含关注点ShaAttribute
属性定义一个SHA属性sha_attribute
类方法。例如:
类提交<ActiveRecord::基地包括ShaAttributesha_attribute:沙结束
的值沙
属性,就像它是字符串一样,同时将其存储为二进制。这意味着你可以做这样的事情,而不必担心将数据转换为正确的二进制格式:
提交=提交.find_by(沙:88 c60307bd1f215095834f09a1a5cb18701ac8ad)提交.沙=“971604 de4cfa324d91c41650fabc129420c8d1cc”提交.保存
但是有一个要求:用于存储SHA的列有必须是二进制类型。对于Rails,这意味着您需要使用:二进制
输入而不是:文本
或:字符串
.