比较 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 个大型数组的最快方法 - 大数据的主要内容,如果未能解决你的问题,请参考以下文章