SHA3​​-256 哈希的索引、数据类型配置和 DBMS 的定义

Mat*_*hew 3 index database-design datatypes hashing

我正在设计一个系统,在该系统中我需要能够使用文件或字符串 SHA3-256 哈希来搜索数据库。

例如,测试的哈希是

36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80
Run Code Online (Sandbox Code Playgroud)
  1. 我应该设置哪个DATATYPE来存储这个值?我听说过使用 BINARY 而不是 VARCHAR。
  2. 我应该如何索引此列,以便按哈希搜索最快?
  3. 我应该使用哪种数据库管理系统(如 PostgreSQL、DB2、SQL Server)或文档软件(如 MongoDB)最有效地允许我通过哈希存储和检索记录?我只有像 MySQL 这样的关系数据库管理系统的经验,但也许像 MongoDB 这样的文档存储会是更好的方法。

Eva*_*oll 6

SHA3​​-256 是 256 位。那是 32个字节。

  • 不要以TEXT任何形式存储它,否则它将是 256字节(大小的 8 倍)。
  • 如果您的数据库支持它,我会将它存储为内联二进制文件,因为我怀疑它是否具有 32 字节数据类型的数据类型(除了 AVX2 之外没有任何用途)。

在索引时,如果您的数据库提供了任何 HASH 索引,它都可以工作。

从 PostgreSQL,

CREATE DOMAIN sha3_256 AS bytea;

CREATE TABLE datastore (
  id     int  PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
  myhash sha3_256
);

CREATE INDEX ON datastore USING HASH (myhash);

INSERT INTO datastore (id,myhash) VALUES
  (1, decode('36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80', 'hex'));
Run Code Online (Sandbox Code Playgroud)

作为特殊优化,您可以将其存储为两个UUIDs。虽然我可能不会打扰。