【问题标题】:A Little Explanation Over Database And SQL关于数据库和 SQL 的一点解释
【发布时间】:2012-09-25 22:59:45
【问题描述】:

我想知道 Facebook(超过 9 亿用户)、Twitter(超过 3 亿用户)等网站如何从数据库中选择用户的登录名和密码来检查登录凭据是否正确用户输入是正确的。例如,在您使用的 SQL 中:

SELECT * FROM Persons
WHERE username=[username from user] 
  and password = [password from user]

但在像 Facebook 这样的更大系统中,他们是否会选择所有 9 亿用户并在用户登录时检查单个用户的登录凭据?如果没有,他们会怎么做?

PS:

问是因为我是这个领域的新手。我知道 SQL,但想知道拥有数百万用户的系统如何检查其用户的登录凭据以及用户从网站搜索某些特定信息的其他相关情况。

【问题讨论】:

  • 1:它们不以纯文本形式存储密码。
  • 没有。您需要了解索引。如果您对性能感兴趣,您还应该了解内存数据库和并行模拟。
  • 不只是使用数据库的网站:link
  • 只要设置正确,大多数数据库系统都可以处理数百万条记录并极其高效地找到一行
  • @Pablo 如果他们不只使用数据库,那么他们还使用什么?告诉我更多

标签: sql database


【解决方案1】:

是的,这就是查询表的方式。这就是 SQL 的用途,高效地查询大量数据。

可以非常有效地对正确的 indexed 列进行排序/过滤。数据库没有对 9 亿条记录进行线性搜索,它将使用某种优化的binary search。假设一棵完美平衡的二叉树,搜索 900,000,000 的最坏情况只需要 30 次比较,即 900,000,000 的 log2。

【讨论】:

  • 那么在登录的时候,就没有必要使用Lucene、Solr等搜索引擎了吗?还是?
  • @EddyFreeman 不,绝对不是。这些用于执行“全文”搜索。也就是说,搜索无法轻松存储在固定长度短字符串中的大块文本。它们在任何情况下都不能用于搜索短的单字列,例如用户名。
  • 感谢您的回复。从到目前为止我从您和 cmets 那里读到的内容,这意味着我必须自己进行数据库索引。我的意思是索引功能不会自动内置到数据库系统(MySQL、Postgre 等)中对吗?
  • 没有。实际上每个数据库都内置了索引。它是数据库和 SQL 设计的根本组成部分。 MySQL 和 PostgreSQL 都实现了各种索引。您不必“自己做”,您只需在要搜索/排序的列上指定索引。您的数据库软件负责构建和维护索引,并在查询涉及索引列时使用它。您只需要指定哪些列应包含在哪个索引中。任何有关创建数据库表的教程都应该告诉你如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 2020-12-09
  • 2020-01-18
  • 1970-01-01
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多