美好的一天,
在我工作的业余时间浏览了一下后,我偶然发现了Facebook statistics页。
"超过30亿件 内容...每月共享。"
我们可以假设有可能让我们每个月发布20亿个帖子。现在,我 相信自从最大限度以来,MySQL处理这么多的信息是没有问题的 无符号BIGINT的值是18 446 744 073 709 551 615.我假设它们使用数字PK 优化目的。
令我困惑的问题是,在C ++中,最大无符号长整数值是 4 294 967 295.当他们的数据库价值时,他们如何处理数据库的主键 现在可能在他们的后端代码中太大而无法处理?
谢谢
答案 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位密钥的表中。