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

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

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

--

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

【问题讨论】:

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

标签: sql-server nosql bigdata


【解决方案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;
    }                 
    

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

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多