performance - badoo.com 用户搜索 - 如何做到这一点?

标签 performance search search-engine

Badoo.com 拥有 56.000.000 个用户配置文件。个人资料可以按性别、年龄、发色、生肖、学历等搜索,加上离家乡的距离、在线状态和注册日期。到目前为止,这似乎是可行的,即使它是对巨大的表(5600 万个成员...)进行相当多的查询,它可以以一般方式缓存。

有趣的是,他们还有一个单独的“排除列表”(对于你查看的每个个人资料,你可以说你不想见到这个人)。另外,你的 friend 也不会出现。

第二个有趣的部分是查询的 OR 部分。您可以搜索以下人士:女性、25-35 岁、金发或黑发、非吸烟者、异性恋或双性恋、处女座或双胞胎或癌症,居住在巴黎半径 50 公里范围内,并且不是您的 friend 且不在您的排除列表中以及现在谁在线。许多 OR、繁重的查询、排序选项、无法缓存或预先计算所有这些,但搜索在毫秒内返回 11.298 个结果。

他们如何用 5600 万个数据集和 25 万人同时使用它来做这样的事情?全文检索索引?关系数据库?关键值(value)商店?
有没有人对概念或架构有想法?

最佳答案

它们很可能是使用倒排索引技术(如 Lucene 或 Sphinx)构建的。如果您想构建一个解决方案,我的建议是 Apache Solr (使用 Lucene 构建的搜索服务器)。它非常受欢迎,拥有活跃的 OSS 社区,并被 Netflix、Cnet 等网站使用。

关于performance - badoo.com 用户搜索 - 如何做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3416402/

相关文章:

java - gc.log写入是异步的吗?将 gc.log 放在 NFS 挂载上安全吗?

c - 用于遍历二维数组的嵌套循环的哪种排序更有效

Cakephp,将旧的谷歌搜索结果路由到新主页

c++ - 开源搜索引擎

security - secret URL 可以被搜索引擎索引吗?

javascript - 使用构建脚本缓存 CSS 文件

python - 为什么错误比脚本本身花费的时间更长?

mysql - 如何对具有字节 KB MB GB 数据的 mysql 列进行排序?

search - 如何在 Apache Solr 中创建 Catch-all 复制字段?

mysql - 学习SQL : Query for rows in diff tables based on if a column value is set