我需要从性能和存储角度找到最佳方式来存储哈希,例如MD5。当前数据库是MariaDB,将来可能是Oracle。这个表将包含数亿或数十亿条记录,每条记录应包括一个哈希值,可用于搜索。目前我使用varchar(32)来存储哈希值,但我认为这种类型不是最优的。我还考虑过像二进制、字符之类的类型,同时我了解到对于稳定大小的哈希,最好使用char而不是varchar以及binary而不是varbinary。此外,我还考虑将哈希转换为数字,这样会更好吗?
那么,在数据库中存储哈希的最佳方法是什么?
我需要从性能和存储角度找到最佳方式来存储哈希,例如MD5。当前数据库是MariaDB,将来可能是Oracle。这个表将包含数亿或数十亿条记录,每条记录应包括一个哈希值,可用于搜索。目前我使用varchar(32)来存储哈希值,但我认为这种类型不是最优的。我还考虑过像二进制、字符之类的类型,同时我了解到对于稳定大小的哈希,最好使用char而不是varchar以及binary而不是varbinary。此外,我还考虑将哈希转换为数字,这样会更好吗?
那么,在数据库中存储哈希的最佳方法是什么?
BINARY(16)
。它占用16个字节,对于MD5已经足够。显然,您需要在列上创建INDEX
。INSERTing
也受到约束,大约相同数量的限制。在插入十亿行数据的早期,由于缓存的原因,速度会很快;后来速度会减慢到每秒100行。插入十亿行数据需要几个月的时间。
PARTITIONing
不会提高性能。
您可能需要使用代码(无论是SQL还是您的应用程序)在函数提供的内容与BINARY
(类似于BLOB
)之间进行转换。
RAW
数据类型来存储二进制数据,长度最大为 4000 字节,并使用 BLOB
来存储更大的值。UTL_RAW.CAST_FROM_NUMBER
函数 将其转换为 RAW
数据类型。