我正在寻找最快/最有效的方法来搜索数千万个用户名中是否有给定的用户名。目前,我正在使用运行每个按键的普通MySQL SELECT查询,但是我对性能不满意。我正在使用索引,分区等,并且我知道MySQL可以优化得非常快,但是我也知道有更好的解决方案。

那么最快的用户名搜索是什么:

  • Redis EXISTS命令
  • Elasticsearch
  • 其他的东西

  • 例如:Gmail在注册时如何在数十亿个电子邮件地址中进行搜索。 Facebook是如何做到的?我认为他们不只是运行SQL查询。

    我正在寻找适用于PHP应用程序的实用解决方案。

    现在,我只是使用一个非常基本的选择:
    SELECT username FROM users WHERE username = $username LIMIT 1
    

    用户名列具有唯一索引

    最佳答案

    我同意您应尝试将其全部粘贴到RAM中(例如Redis)。

    但是,如果您不想一路走下去,请执行以下操作:将列表存储在较慢的位置(例如S3或SQL数据库)。接下来,从该列表中创建一个Bloom过滤器(在Wikipedia上有东西,并且可以使用一个漂亮的Redis模块-https://oss.redislabs.com/redisbloom)。

    现在,BF告诉您绝不会给您带来误报,因此您可以有效地检查用户名是否可用。但是,有时BF会报告用户名不可用(误报),您已决定是否可以使用该用户名。

    关于php - 检查用户名是否可用于庞大的数据集的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55941277/

    10-15 09:20