比较 2 个大型数组的最快方法 - 大数据

Posted

技术标签:

【中文标题】比较 2 个大型数组的最快方法 - 大数据【英文标题】:Fastest approach to compare 2 large arrays - large data 【发布时间】:2012-12-21 21:33:47 【问题描述】:

我有一个大约 10 毫米散列的数据集。我需要允许人们将哈希列表与那些进行比较,以查看它们是否匹配。现在我们使用 sql 并基本上扫描它以查找猜测数组中的每个项目。这适用于大约 10K,但用户需要检查更大的集合,例如 200K 散列与 10mm 散列的字典

在 sql 或 nosql 或其他方面可能是一个好的方法

--

对于意图的上下文,我们管理一个选择退出列表,并允许营销经理上传一份针对它的工作表,我们会返回一个干净且无邮件的文件。

【问题讨论】:

“10mm”是什么意思? 1000 万还是 1000 万(=10 万亿)? 你打算在什么语言/操作系统上运行它? 马特 - 任何语言都可以 Philipp - 10mm 意味着 1000 万,奇怪的习惯,谢谢你让我谷歌它 【参考方案1】:

如果您可以在表中提供搜索值,则 EXCEPT 查询可能是您的最佳选择。这将为您提供不在表 2(选择退出列表)中的表 1(搜索值)的所有条目。除了示例,请参阅我的帖子:http://sqlity.net/en/1401/a-join-a-day-except/

如果由于搜索值不在数据库中而无法选择,请创建一个包含所有 1000 万个哈希值的内存驻留哈希表,并使用它来确定给定电子邮件是否是列表的一部分。即使您必须为每个批次重新构建该表,它也比向数据库发送 20 万个请求要快。

【讨论】:

【参考方案2】:

目前的解决方案似乎无法扩大规模, 即添加更多内存、CPU 等以保持响应 用户想要的解决方案不再可能 由于系统负载增加。

保持响应能力的一种方法是实施 可以横向扩展的可扩展解决方案,即分发 跨多个系统的工作负载。

例如如果您可以拥有 10 个系统,每个系统都有一个本地副本 在 nosql 中的 1000 万个哈希中,然后当一个请求 进来检查 200K 哈希,工作可以得到 分布在 10 个系统中,每个系统处理一个请求 检查 20K 哈希。

这是经典的分而治之方法。

伪代码类似于

while (1)                    
    wait for a request to come in;

    for (j = 1; j < 10; j++) 
        spawn(system[j], 1/10 of the request for matching)
       

    wait for/collect responses from 10 systems

    return result;
                 

系统上的本地副本必须保持一致 进行任何更改(例如添加/删除)时。

【讨论】:

以上是关于比较 2 个大型数组的最快方法 - 大数据的主要内容,如果未能解决你的问题,请参考以下文章

请教Java处理大批量的数据

在 Python 中保存和加载大型字典的最快方法

不能短字符串数组具有大字符串数

在 python 或 spark 中获取大数据缺失值的最快方法是啥?

大型数据集最快的分类算法是啥? [关闭]

增长 numpy 数值数组的最快方法