存储Facebook UID的最佳数据库类型是什么?

时间:2013-03-29 18:54:13

标签: database facebook authentication facebook-authentication

我的应用程序的用户可以通过Facebook进行身份验证,因此我将facebook uids存储在我的数据库中,当用户登录时,我需要像这样查询我的数据库:

SELECT * FROM users WHERE uid = _SOME_UID_;

现在uid列是VARCHAR,但我认为我需要将其转换为某种数字类型BIGINT。

为什么我认为我需要这样做:

  1. 处理器时间一般使用数字(过滤/索引)的操作总是比使用字符串的相同操作更快

  2. 存储:数字小于相应的字符串

  3. ammm ... oauth-argument Facebook身份验证是我将要使用的唯一身份验证类型(实际上,这是一个画布应用程序) - 所以我不需要照顾非数字的UID

  4. 问题是:

    1. 我是对的吗?
    2. 有一天Facebook可以开始使用非数字uid吗?

2 个答案:

答案 0 :(得分:1)

我会坚持使用VARCHAR。

虽然它当然可以存储为一个,但我认为Facebook UID并不是真正的数字。它是一组字符,恰好是所有数字 - 但它是一个标识符,而不是一个被操纵的数字。

我想知道真正的性能差异。找出答案,做出决定会更容易。

答案 1 :(得分:1)

这取决于几个因素。首先,您的数据收集可能有多大,我们是在谈论成千上万的UID还是数百万?如果您不担心规模,如果您的项目然后尝试找到最小的容器(一个大整数),那么您更担心能够随着更改进行扩展。

所以现在你需要选择一个合理大小的VarChar,它将采用任何格式的UID并且开心 - 这包括前导零和bigInt,它更容易消毒但对前导零和字母不友好。

如果您知道 UID始终是非前导零或零填充数字,那么您可以通过强制转换为类型来获得更好的安全性。这和大小都是bigInt的好处。

VarChar的大小有所下降 - 你需要在开始之前知道最大的UID长度,但是可以处理前导零,字母和其他意外内容,只有你正在清理字符串的小例外。

从编程的角度来看,由于UID只是一个独特的标签,因此它的可能性很小。有了它的索引,我不应该想象MySQL中存在任何速度差异,至少不是它可能使用的常见引擎。

所以最佳只是数据中最需要的产品。