首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建大型散列数据库的技巧

问创建大型散列数据库的技巧
EN

Stack Overflow用户
提问于 2011-03-15 14:36:22
回答 1查看 1.6K关注 0票数 7

问题是:您有什么解决方案或技巧来处理一个非常大的(数百兆字节)数据库,这些数据库都是在高冗余的强散列上索引的?

某种倒置存储?

有什么可以用Postgres做的吗?

如果需要的话,我已经准备好自己的仓库了。

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

详情如下:

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

  • 一些任意元数据(一些文本字段),包括一些主键
  • one hash (128位散列,强md5类)

。

我认为,唱片的数量是相当大的:数以百亿计的数字。行间散列存在显着的冗余(超过40%的记录与至少另一条记录共享散列,100 K记录中存在一些哈希)

主要用途是通过散列查找,然后检索元数据。次要用法是按主键查找,然后检索元数据。

这是一个分析型数据库,所以总的负载是中等的,大部分是读的,很少写的,大部分是批写的。

当前的方法是使用Postgres,主键上有一个索引,哈希列上有一个索引。表是批量加载的,散列上的索引已关闭。

所有索引都是btree。散列上的索引越来越大,比表本身更大或更大。在120 GB的表上,重新创建索引需要大约一天的时间。不过,查询性能相当好。

问题是,基于测试结果,目标数据库的预计大小将超过4TB,数据集较小,为400 4TB,约占目标总数的10%。一旦加载到Postgres中,不幸的是,散列上的SQL索引使用了超过50%的存储。

这个太大了。我觉得散列中的冗余是一个减少存储的机会。

还请注意,虽然这描述了问题,但需要创建一些这些表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-15 14:45:41

您可以创建一个只有id和Hash的表,以及包含索引、元数据和hashId的其他数据。这样做,可以防止在表中写入相同的哈希数高达100 k次。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5313321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档