0

我从我的用户那里收集了一个 Facebook 好友列表,包括 First、Last、Gender 和 DOB。然后,我尝试将该名称数据库(存储为 MySQL 中的表)与包含类似信息的另一个数据库进行比较。

在第二个数据库是更大的记录集(> 500k 行)时,从概念上链接这些结果的最佳方法是什么?

这是我的提议:

  • 遍历 Facebook 名称
  • 搜索 Last + DOB - 如果它们匹配,则假定为“自信”匹配
  • 搜索 Last + First - 如果它们匹配,则假定“可能”匹配
  • 搜索 Last + Lichtenstein(First) 高于某个级别,假设“可能”匹配

是否有我遗漏的分布式计算概念可能比顺序 mySQL 方法更快?还有什么其他陷阱可能会出现,注意到没有误报比错过记录更重要?

4

2 回答 2

1

是的,你的想法似乎是一个更好的算法。

假设您关心性能,您可以使用缓存来存储刚刚搜索的值。您还可以开始在 NoSQL 数据库中对结果进行索引,这样结果会非常快,从而获得更好的读取性能。如果您必须使用 MySQL,请阅读polyglot persistence

假设您关心的是简单性,您仍然可以在 NoSQL 数据库中使用索引,因此随着时间的推移,您不必进行无数次连接会破坏用户和开发人员的体验。

可能还有更多问题,但这完全取决于您想在哪里使用它,在网站中使用,或用于此类数据分析目的。

于 2013-09-26T15:59:14.363 回答
1

如果你想对整个数据集进行操作(而不是一些交互的东西),这个数据集的大小可能足够小,可以简单地进入内存并从那里开始。使用 List 来保留数据,然后创建一个 Map>,它为每个唯一的姓氏指向(通过整数索引)到列表中存在的所有位置。您还将使自己能够执行更复杂的匹配逻辑,而不会陷入试图强制 SQL 执行此操作的困境。特别是因为您跨越两个不同的物理数据库......

于 2013-09-26T21:34:12.547 回答