Database 如何搜索100亿条记录?

Database 如何搜索100亿条记录?,database,performance,record,Database,Performance,Record,这不是我的问题,只是我一直想知道的一个问题。在这里问它是为了提高自己的知识 所以我有基本的数据库知识mysql,查询等 但是看看像Haveibeenpwend这样的网站。他们声称他们有大约100亿条记录。给他们你的电子邮件,他们将查询和搜索他们的数据库,以找到你的电子邮件 在不到1秒的时间内,他们会提供一个结果,显示您的电子邮件中发现的所有违规行为 我的问题是,这是如何做到的?MySQL能处理这个问题吗?这可以通过使用特殊算法索引文本文件来实现吗?我个人在MySQL中使用了5亿行,这是MySQL

这不是我的问题,只是我一直想知道的一个问题。在这里问它是为了提高自己的知识

所以我有基本的数据库知识mysql,查询等

但是看看像Haveibeenpwend这样的网站。他们声称他们有大约100亿条记录。给他们你的电子邮件,他们将查询和搜索他们的数据库,以找到你的电子邮件

在不到1秒的时间内,他们会提供一个结果,显示您的电子邮件中发现的所有违规行为


我的问题是,这是如何做到的?MySQL能处理这个问题吗?这可以通过使用特殊算法索引文本文件来实现吗?

我个人在MySQL中使用了5亿行,这是MySQL标准的一个大型数据库,但距离您提到的100亿行还差20倍

我不知道MySQL在100亿行中的表现如何,但在今天的硬件中,它至少应该是不错的

现在,关于搜索:

  • 在这种规模的数据库中进行搜索必须使用索引
  • 必须具有非常狭窄的筛选条件。您可能需要将您的标准缩小到最多数千行的数据
  • 必须在非常有限的行范围内使用“索引查找”操作或“索引范围扫描”
  • 搜索/主表(索引所在的位置)必须具有数量有限的轻量级列,以最小化表及其索引的大小
  • 额外的繁重数据(图像、文档、音频、视频、长文本等)必须存储在单独的表中,当在主表上缩小搜索范围时,可以查找这些表
如果您这样做,您的搜索查询可以运行得很快,非常快,甚至在如此大的数据库上。在任何情况下,您都需要定制数据的特定结构,以确保高速运行。

对于堆栈溢出来说,这可能是一个过于宽泛的问题。本网站旨在避免冗长或开放式的讨论。我建议您使用论坛网站,如