【问题标题】:Storing data for faster search存储数据以加快搜索速度
【发布时间】:2017-05-31 14:59:26
【问题描述】:

只是一个一般性问题。

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

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

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

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

【问题讨论】:

  • 这个问题太笼统了,离题(求站外资源)。我可以给你一个提示:不要假设你的初创公司的应用程序会成为下一个谷歌或 Facebook,你会没事的。需要时进行扩展。
  • @codeCaster :我不认为我的创业公司会像 fb 或 google 一样大。我以那些公司为例。只是想采取预防措施,以便在需要时更容易扩展。感谢您的反馈
  • 没有灵丹妙药,也没有“一刀切”的答案。需要时进行缩放。不要过度设计,不要过早优化。识别瓶颈何时出现(无论多么轻微),不要以为你可以预测所有瓶颈。

标签: mysql mongodb data-structures database


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    相关资源
    最近更新 更多