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数字。
你的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应该这样做吗?