我正在AWS上为一个处理大量实体的系统devise云架构。 我希望这是这个问题的正确的StackExchange(所以对我来说看起来并不合适 – 随意迁移问题)。
问题描述
对于数据库中的实体(对象可以通过它们的键 – 基本上是一个noSQL DB),我有一个很大的数字(假设n = 1 000 000 )。 我有一个algorithm,能够采取两个对象,并产生一个值,表明它们的相似性(可以说,计算大约10毫秒)。
系统应该能够将一个任意实体与我的数据库中的所有实体进行比较,并且还能够识别我的数据库中的所有重复项(这意味着将每个实体与其他实体进行比较!)。
devise
我把它写在纸上,做了一些基本的估计(合理数量的工人使用多个线程),并发现执行双重身份识别需要太多的时间 – 这对于“一对多”比较是合理的,但试图执行1000000 ^ 2操作太多了。
我正在考虑在MapReduce中使用Hadoop,但是似乎我不得不为每个“一个对其他人”的比较启动一个新的工作(并且运行百万个工作听起来不是很快)。
因此,如果我的devise更好,克服这些缺陷,我会非常高兴。 而且,任务(每个比较)甚至可以执行而不需要运行数百个强大的实例(价格也是限制)。
如果你正在寻找“重复”,而你的指标是欧几里得,那么你可能不需要知道远处的物体之间的距离。 谷歌search“高效knn”可能会让你走上正轨。
直觉的比喻:如果你在希腊某人的50公里范围内寻找邻居,不要花很多时间计算与美国所有人的距离。 这些距离永远不会发现邻居。