存储数据以加快搜索速度

时间:2017-05-31 14:59:26

标签: mysql mongodb data-structures database

只是一个普遍的问题。

我想知道像Facebook和谷歌这样的公司如何在如此短的时间内搜索数百万的数据。

假设我必须登录,我在登录页面输入我的用户凭据。 fb和google如何存储用户名和密码,以便他们可以浏览数百万/数十亿的用户名并检查用户是否存在?

如果有创业公司,他们应该如何保存用户的数据,以便以后搜索和提取用户详细信息的速度更快。我们应该根据用户名的第一个字母为用户创建一个单独的表吗?还是他们还有其他更好的方法吗?

如果有任何与此问题相关的好文章建议我阅读,请告诉我。

1 个答案:

答案 0 :(得分:1)

随着应用程序数据量的增长,在集中式数据库中搜索数据将成为瓶颈。如果您在开始应用程序本身的开发时考虑扩展问题,请确保您的系统可以轻松地部署到并行系统。

例如,考虑一下您的数据无法适应单个数据库服务器的情况,无论其配置如何良好。您必须将此数据拆分为多个主机。这称为分片。在分片中,数据基于某些键分发到多个主机。以Facebook为例。它可以为每个国家维护一个数据库服务器(只是一个假设,我真的不知道他们是如何实现它的)。因此,当用户尝试从印度登录时,他的用户将仅在印度用户数据库中搜索,而不是在Facebook的整个用户群中搜索。考虑到Facebook庞大的数据库规模,将搜索空间从整个用户群减少到印度用户群肯定会提高查​​询性能。

像MongoDB这样的数据库服务器和ElasticSearch提供了对分片的内置支持。借助这些功能,我们可以通过添加越来越多的机器来横向扩展系统,而不是垂直扩展(将单个服务器扩展到最大容量)。