facebook如何处理他们的数据库信息?

时间:2011-01-04 20:58:04

标签: c++ facebook database-design

美好的一天,

在我工作的业余时间浏览了一下后,我偶然发现了Facebook statistics页。

  

"超过30亿件   内容...每月共享。"

我们可以假设有可能让我们每个月发布20亿个帖子。现在,我 相信自从最大限度以来,MySQL处理这么多的信息是没有问题的 无符号BIGINT的值是18 446 744 073 709 551 615.我假设它们使用数字PK 优化目的。

令我困惑的问题是,在C ++中,最大无符号长整数值是 4 294 967 295.当他们的数据库价值时,他们如何处理数据库的主键 现在可能在他们的后端代码中太大而无法处理?

谢谢

3 个答案:

答案 0 :(得分:3)

64位长unsigned long long怎么样,和BIGINT完全一样? :) 另外,我认为Facebook不会为他们的数据库使用数字ID,因为在使用并行插入的多服务器数据库配置中很难做到这一点。

答案 1 :(得分:0)

很简单,你用C ++编写自己的BIGINT数据类型来处理非常大的数字(实际上可能在内部表示为字符串)。

我的意思是想到一个链表

struct myNode{
char num;
myNode* next;
}

现在链表可以包含比你期望的典型long / int更多的整数。

这并不意味着我知道Facebook正在做什么或使用什么,但有很多变化。 Facebook也是如此之大,所有数据都不会保存在一个数据库中......您也可能会对技术和编程语言以及数据库供应商做出假设。

他们可能正在使用GUID :),他们可能正在使用Oracle甚至是SQL Server 服务器肯定是负载均衡的,并且分布在美国各地的许多服务器上,也可能在美国以外。它不是一个简单的应用程序,但它确实看起来像一个。

答案 2 :(得分:0)

如果您使用的是64位系统(已经是Windows 7台式机的默认系统),那么您可以计算40亿次40亿次。

如果Facebook上有40亿人在线,他们都可以发表40亿条评论,你仍然可以将所有这些评论存储在一个64位密钥的表中。