创建非常大的哈希数据库的提示

Phi*_*nne 7 database hash bigdata inverted-index

问题:您需要使用哪种解决方案或技巧来处理一个非常大(多TB)的数据库,该数据库在具有高冗余的强哈希上编制索引?

某种倒置存储?

Postgres有什么可以做的吗?

如果需要,我准备推出自己的存储空间.

(提示:必须是开源的,没有Java,必须在Linux上运行,必须基于磁盘,首选C/C++/Python)

细节:

我需要创建一个非常大的数据库,其中每个记录具有:

  • 一些任意元数据(一些文本字段),包括一些主键
  • 一个哈希值(128位哈希值,强MD5样)

记录的数量是我认为非常大的数量:几十到十亿的数十亿.跨行的哈希存在显着的冗余(超过40%的记录的哈希与至少另一条记录共享,一些哈希存在于100K记录中)

主要用法是通过哈希查找,然后检索元数据.次要用法是按主键查找,然后检索元数据.

这是一个分析型数据库,因此总体负载是中等的,主要是读取,少量写入,主要是批量写入.

当前的方法是使用Postgres,主键上有索引,哈希列上有索引.该表是批量加载的,并且关闭了散列上的索引.

所有索引都是btree.哈希列上的索引越来越大,比表本身大或大.在120 GB的表上,重新创建索引大约需要一天.查询表现相当不错.

问题是目标数据库的预计大小将超过4TB,基于400GB的较小数据集的测试,约占总目标的10%.一旦加载到Postgres中,遗憾的是,超过50%的存储被哈希列上的SQL索引使用.

这太大了.我觉得哈希中的冗余是存储更少的机会.

另请注意,虽然这描述了问题,但是需要创建一些这样的表.

Tok*_*okk 5

您可以创建一个仅包含id和Hash的表,以及包含index,Metadata和hashId的其他数据.这样做,您可以防止在表中写入相同的哈希达100k次.