云build筑devise

我正在AWS上为一个处理大量实体的系统devise云架构。 我希望这是这个问题的正确的StackExchange(所以对我来说看起来并不合适 – 随意迁移问题)。

问题描述

对于数据库中的实体(对象可以通过它们的键 – 基本上是一个noSQL DB),我有一个很大的数字(假设n = 1 000 000 )。 我有一个algorithm,能够采取两个对象,并产生一个值,表明它们的相似性(可以说,计算大约10毫秒)。

系统应该能够将一个任意实体与我的数据库中的所有实体进行比较,并且还能够识别我的数据库中的所有重复项(这意味着将每个实体与其他实体进行比较!)。

devise

  • DynamoDB(或用于我的实体的类似的noSQL存储)
  • 处理器 – 在EC2上运行的主要服务,它将加载所有实体密钥,并将计算请求放入可扩展队列(SQS) – 为其他工作人员分配工作量
  • 工作负载队列 – 计算请求队列
  • 工人 – 部署到ElasticBeanstalk的服务连接到工作负载队列。 工作人员连接到数据库,获取要比较的实体并运行algorithm
  • 结果DB – 无论是关系型数据库还是非关系型数据库,都有来自工人的结果

我把它写在纸上,做了一些基本的估计(合理数量的工人使用多个线程),并发现执行双重身份识别需要太多的时间 – 这对于“一对多”比较是合理的,但试图执行1000000 ^ 2操作太多了。

我正在考虑在MapReduce中使用Hadoop,但是似乎我不得不为每个“一个对其他人”的比较启动一个新的工作(并且运行百万个工作听起来不是很快)。

因此,如果我的devise更好,克服这些缺陷,我会非常高兴。 而且,任务(每个比较)甚至可以执行而不需要运行数百个强大的实例(价格也是限制)。

如果你正在寻找“重复”,而你的指标是欧几里得,那么你可能不需要知道远处的物体之间的距离。 谷歌search“高效knn”可能会让你走上正轨。

直觉的比喻:如果你在希腊某人的50公里范围内寻找邻居,不要花很多时间计算与美国所有人的距离。 这些距离永远不会发现邻居。