谷歌+用户ID的最佳列类型是什么?

33

Google+用户ID非常长

104560124403688998123

(21个字符),这不可能输入到BIGINT字段中(不是无符号的)

您会为这样的ID使用哪种列类型?

我认为varchar并不是一个好主意。

5个回答

20
如果Google ID的长度是可以预测的,那么使用一个静态的char(length),在上面创建一个索引并创建一个(内部)整数主键。在应用程序内部,将数据映射到整数主键。因此,如果有人通过Google ID进行搜索,则查找该Google ID对应的整数主键,并使用该整数主键执行其余查询。

因此,模式如下:

映射表:

id (integer) | google_id (char(length)) 

如果您创建另一个类似评论等的表,请使用主键 id ,如果要查找某个 googleid 的所有评论,请先获取内部 id,然后加入评论。这样,您只有一个静态、具有可预测长度的索引字符字段上的查询条件,所有其他连接和查询将使用整数键。


是的,这就是我在寻找的。 - genesis
当ID达到限制时,映射表不会溢出吗?那我们还有什么选择? - maaz
嗨,每个唯一的google_id在映射表中只有一行,假设他正在使用带有无符号整数字段的mysql,则限制将为4294967295。如果这不够用,您仍然可以切换到bigint或使用复合主键。由于MySQL能够存储TB范围内的数据,表大小溢出不太可能发生。 - sled
不错!请确保在此映射表中没有varchar或text列,因为这样做会将整行设置为可变长度,从而破坏使用char以提高性能的目的。 - Kamy D

6
我会跟Facebook一样使用 varchar

搜索时使用整数列作为WHERE子句非常好,但我认为varchar不太好。 - genesis
2
@genesis,我不确定“int很棒”,但任何可能随时出问题的东西都很糟糕! - PC.

5

我无法找到 Google 的官方建议,但使用 小数 21,0 是正确的。


1
在Appengine上使用Python,我使用ndb.StringProperty保存数据,并使用\d{15}的正则表达式进行验证,从而给出一点余地。了解验证此字段的真实正则表达式将非常有帮助。

0
我建议使用 VARCHAR(255)(可变长度字符串,最多255个字符)。原因是id可能是一个ASCII字符串,长度最长可达255个字符,参见下面的引用。

Google OpenID Connect
“验证用户涉及获取ID令牌并验证它。 ID令牌是OpenID Connect的标准功能,旨在用于在互联网上共享身份声明。”
OpenID Connect Core 1.0 incorporating errata set 1
sub:(google id)
“必需。主题标识符。 Issuer中用于End-User的本地唯一且永不重新分配的标识符,旨在由Client消耗,例如24400320或AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4。其长度不得超过255个ASCII字符。 sub值是区分大小写的字符串。”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接