将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,这意味着您需要使用:二进制输入而不是:文本:字符串

Baidu
map