php - 检查用户名是否可用于庞大数据集的最快方法是什么?

标签 php mysql redis

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

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

  • Redis EXISTS 命令
  • Elasticsearch
  • 其他

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

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

现在我只是在使用一个非常基本的选择:

SELECT username FROM users WHERE username = $username LIMIT 1

用户名列有唯一索引

最佳答案

我同意您应该尝试将其全部保存在 RAM 中(例如 Redis)。

但是,如果您不想一路走下去,我会执行以下操作:将列表存储在某个缓慢的地方(例如 S3 或 SQL 数据库)。接下来,从该列表中制作一个 Bloom 过滤器(维基百科上有关于它的内容,并且有一个漂亮的 Redis 模块可供您使用 - https://oss.redislabs.com/redisbloom)。

现在,BF 告诉您永远不会给您漏报,因此您可以有效地检查用户名是否可用。然而,有时 BF 会报告用户名不可用(误报),而您已经决定是否可以接受。

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

相关文章:

javascript - PHP session 与 AJAX 不持久

php - 回显更新值而不是旧值

贯穿整个项目的 PHP 全局变量

python - GAE 开发服务器导致 MySQL 连接错误 - 类似的连接代码在交互式 shell 中工作

ruby-on-rails - 带 Rails 的 Redis

php - 如何为新闻门户创建 CMS?

mysql - 在一个查询中执行多个 MySQL 计数?

sql - 如何用想要的结果做这个 GROUP BY?

redis - Redis 镜像目前是否可以在 Windows 上与 Docker 一起使用?

mongodb - 我应该使用什么样的数据库以及如何为广告网络平台设计数据库