如果我将所有网页的标题和 URL 保存在 MySQL 数据库中,那么数据库会有多大?

如果我将所有网页的标题和 URL 保存在 MySQL 数据库中,那么数据库会有多大?

为了学习目的,我想制作一个简单的网络索引器,它可以抓取网络并将找到的所有页面及其标题和 URL 保存在 MySQL 数据库中,并使用此表(不保存页面内容):

  • id:整数AUTO_INCREMENT PRI
  • 标题:varchar(100)
  • 网址:varchar(500)

该数据库大约有多大?大约几百 MB、GB 还是大约 TB?谢谢。

答案1

想要快速获得答案,请滚动到底部。否则,请阅读我的叙述以了解我是如何得出这些数字的。

2008 年,谷歌发布了一些你可能感兴趣的数字。当时,谷歌的蜘蛛知道1 万亿(即 1,000,000,000,000)个唯一 URL。需要注意的一点是并非所有这些 URL 都已编入索引。对于你的情况,我们假设我们将索引所有内容。您可以在此处阅读此公告:http://googleblog.blogspot.com/2008/07/we-knew-web-was-big.html

您的列的当前大小id仅允许20亿索引中的 URL。如果你这样做,unsigned int你可以挤压40亿但假设接近无限的规模,您将想要使用unsigned bigint实际上,您将想要使用 uuid 或类似的东西,以便您可以同时生成 ID(来自多个主机),但对于本练习,我们假设我们正在使用unsigned bigint

因此,从理论上讲,我们得到了这个可无限扩展的 MySQL 表,其定义如下:

  • ID:unsigned bigint AUTO_INCREMENT
  • 标题:varchar(100)
  • 网址:varchar(500)

每个列的存储要求如下:

  • ID:8字节
  • 标题:100 + 1 = 101 字节
  • url:500 + 2 = 502 字节
  • 行大小*:502 + 101 + 8 =611 字节(忽略开销、表头、索引等)

参考:http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

现在,为了得到理论表大小,我们只需乘以我们的1万亿唯一 URL:

611 字节 * 1,000,000,000,000 个 URL = 611,000,000,000,000 字节 =~555.7 TB

就是这样。1 万亿个 URL 乘以我们定义的表的存储大小将占用近 556 TB 的数据。我们还必须添加索引数据、表开销和其他一些内容。同样,我们也可以减去数据,因为对于我们的练习,我假设每varchar列都已达到最大值。希望这会有所帮助。

(另外,只需快速澄清一下:我知道 bigint 列不是接近无限的,但是当你不担心物流时,做数学运算会更容易)

相关内容