如果我将所有的网页标题和url保存在MySQL数据库中,这个数据库有多大?

为了学习的目的,我想制作一个简单的网页索引器来抓取网页,并将所有find的页面保存在一个MySQL数据库中,使用它们的标题和URL,这个表格(页面的内容不会被保存):

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

那个数据库有多大? 是几百MB,GB还是TB? 谢谢。

为了快速和肮脏的答案,滚动底部。 否则,请仔细阅读我的叙述,了解我是如何得出这些数字的。

在2008年,Google发布了一些您可能感兴趣的数据。 那时候,Google的蜘蛛意识到超过1万亿(即1,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)
  • url: 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 太字节

所以你有它。 1兆的URLs乘以我们定义的表的存储大小将占用将近556太字节的数据。 我们还必须添加索引,表开销和其他一些东西的数据。 同样,我们也可以减去数据,因为对于我们的练习,我假定每个varchar列都已被最大化。 我希望这有帮助。

(另外,只是一个简单的说明:我知道bigint专栏并不是无限的,但是当你不担心物stream的时候,做math就容易了)