Facebook user_id:big_int,int或string?

Facebook的用户ID最高可达2 ^ 32,而我的数字是4294967296。

mySQL的无符号整数的范围是0到4294967295(这是1短 – 或者我的math是错误的),其无符号大整数的范围是0到18446744073709551615

int = 4字节,bigint = 8字节

要么

我把它存储为一个string?

varchar(10)=? 字节

它会如何影响效率,我听说mysql句柄的数字远远胜过string(性能明智)。 那么你们推荐什么?

由于Facebook分配的ID,而不是你,你必须使用BIGINTs。

Facebook不会顺序分配ID,我怀疑他们有一些分配数字的机制。

我最近修正了这个错误,所以这是一个真正的问题。

我会把它放在UNSIGNED,因为这就是它。

不会使用一个string。 这使得比较痛苦,你的索引比他们需要的笨重。

你不能再使用INT了。 昨天晚上我有两个用户id超过INT(10)。

如果你在2015年阅读这个时,Facebook已经升级他们的API到2.0版本。 他们在他们的文档中添加了一个注释,说明他们的ID将会被改变,并且会有一个应用程序范围。 所以在未来的将来他们可能会把所有的id变成Alpha数字。

https://developers.facebook.com/docs/apps/upgrading#upgrading_v2_0_user_ids所以我build议保持types为varchar,并避免任何未来的迁移的痛苦;

你的math是一个小错误…记住,你可以存储在N个字节中的最大数目是2 ^(N)-1 …不是2 ^(N)。 有2 ^ N个可能的数字,但是可以存储的最大数量是1个。

如果Facebook使用unsigned big int,那么你应该使用它。 他们可能不会顺序分配他们。

是的,你可以得到一个varchar …但是它会更慢(但可能不像你想的那么多)。

我使用bigint来存储Facebook的ID,因为这就是它。

但在内部为表的主键和外键,我使用smallint,因为它更小。 但也因为如果bigint应该必须成为一个string(通过用户名而不是id),我可以很容易地改变它。

所以我有一个如下所示的表格:

profile - profile_key smallint primary key - profile_name varchar - fb_profile_id bigint 

和一个看起来像这样的

 something_else - profile_key smallint primary key - something_else_key smallint primary key - something_else_name varchar 

和我的单页查询可能是这样的:

 select profile_key, profile_name from profile where fb_profile_id = ? 

现在我采取profile_key并在下一个查询中使用它

 select something_else_key, something_else_name from something_else where profile_key = ? 

简介表几乎总是被查询几乎任何请求,所以我不认为这是一个额外的步骤。

而且对于一些额外的性能来说,caching第一个查询也是相当容易的。

将它们存储为string。

FacebookgraphicsAPI将string作为string返回,所以如果你想比较工作,而不必投,你应该使用string。 海事组织这胜过其他考虑。

我会坚持INT。 这很容易,它很小,它的工作原理,你可以随时将列更改为更大的大小,如果你需要的话。

供参考:

VARCHAR(n) ==> variable, up to n + 1 bytes
CHAR(n) ==> fixed, n bytes

除非你预计世界上60%以上的人口报名,int应该这样做吗?