Mysql 什么';s是Google的最佳列类型+;用户ID?

Mysql 什么';s是Google的最佳列类型+;用户ID?,mysql,google-plus,Mysql,Google Plus,Google+有很长的用户ID 104560124403688998123 (21个字符),无法输入到BIGINT字段(非无符号) 对于这样的ID,您将使用什么列类型 我不认为varchar是个好主意我会使用与Facebook相同的方法:varchar如果google id的长度是可预测的,请使用静态char(长度),在其上添加索引并创建(内部)整数主键。在应用程序内部,将数据映射到整数主键。因此,如果有人按google id进行搜索,您将查找此google id的整数主键,并使用整数主键执行其

Google+有很长的用户ID

104560124403688998123

(21个字符),无法输入到BIGINT字段(非无符号)

对于这样的ID,您将使用什么列类型


我不认为varchar是个好主意

我会使用与Facebook相同的方法:varchar如果google id的长度是可预测的,请使用静态
char(长度)
,在其上添加索引并创建(内部)整数主键。在应用程序内部,将数据映射到整数主键。因此,如果有人按google id进行搜索,您将查找此google id的整数主键,并使用整数主键执行其余查询

因此,模式如下所示:

映射表:

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

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

我找不到谷歌的官方推荐,但我使用的十进制21,0工作正常。

在appengine上的python中,我使用ndb.StringProperty保存数据,并使用regex\d{15}进行验证,因此留出了一点空白。如果能知道什么是真正的正则表达式来验证此字段,那就太好了

搜索时这很糟糕。Int列对于WHERE子句很好,但我认为varchar不是t@genesis,我不确定“int是否很棒”,但任何可能在任何时候损坏的东西都非常糟糕!是的,这就是我想要的。当id达到一个极限后,映射表不会溢出吗?这是我们剩下的选项吗?嗨,在映射表中,每个唯一的google_id只有一行,假设他使用的是带有无符号int字段的mysql,则限制为4294967295。如果这还不够,您仍然可以切换到bigint或使用复合主键。表大小溢出不太可能发生,因为MySQL能够存储TB范围内的数据。很好!确保此映射表中没有varchar或text列,因为这样做会将整行设置为可变长度,这最终会破坏使用char提高性能的目的。