小编Phi*_*nne的帖子

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

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

某种倒置存储?

Postgres有什么可以做的吗?

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

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

细节:

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

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

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

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

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

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

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

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

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

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

database hash bigdata inverted-index

7
推荐指数
1
解决办法
1134
查看次数

python中有序集合的交集

我是python的新手,这就是为什么我正在努力解决我认为非常基本的问题.我有两个清单:

a = [0, 1, 2, 3, 4, 5, 6, 7]
b = [1, 2, 5, 6]
Run Code Online (Sandbox Code Playgroud)

在输出上我需要得到它们之间的所有交叉点:

c = [[1, 2], [5, 6]]
Run Code Online (Sandbox Code Playgroud)

那个算法是什么?

python python-3.x

1
推荐指数
1
解决办法
542
查看次数

标签 统计

bigdata ×1

database ×1

hash ×1

inverted-index ×1

python ×1

python-3.x ×1