1

Пользователи моего приложения могут проходить проверку подлинности с помощью Facebook, поэтому я храню facebook UIDs в моей базе данных, и при входе пользователя в систему ввода нужно запросить мою базу данных, как это:Что такое лучший тип базы данных для хранения UID facebook?

SELECT * FROM users WHERE uid = _SOME_UID_; 

Теперь uid столбец VARCHAR, но я думаю, что Мне нужно преобразовать его в некоторый числовой тип BIGINT.

Почему я думаю, что мне нужно сделать, это:

  1. процессорное время: в общих операций с числовым (фильтрация/индексации) всегда быстрее, чем те же операции со строкой

  2. хранение: числовое значение меньше соответствующей строки

  3. ammm ... oauth-argume нт аутентификация Facebook является единственным типом аутентификации, я собираюсь использовать (actualy, это приложение холста) - так мне не нужно заботиться о UIDs, которые не являются Числовыми

и вопросы :

  1. Я прав?
  2. Может ли Facebook когда-нибудь начать использовать нечисловые uids?
+0

Я не думаю, что они когда-нибудь начнут использовать нечисловые идентификаторы, которые вызовут много проблем в их системе (поскольку, я думаю, они используют некоторую проверку формата на asidel userID). Bigint будет прекрасно. –

+0

varchar можно использовать в качестве карты для поиска машины, на которой хранятся данные, и могут использоваться другие незнакомые трюки (вы могли бы сделать то же самое с цифрами, но было бы сложнее получить правильную цифру). Я предполагаю, что использование системы facebook для хранения данных более сложно, чем традиционные базы данных, и потенциально может использовать varchars в своих интересах. Наконец, любой инженер-программист думает о том, чтобы использовать число как ключ в качестве первоначальной мысли. Я уверен, что Facebook подумал об этом и решил использовать варчар по уважительной причине. –

ответ

1

Я бы придерживался VARCHAR.

Хотя это, безусловно, может быть сохранено как единое целое, UID на мой взгляд на самом деле не является числом. Это набор символов, которые так кажутся для всех - это номера, но это идентификатор, а не число, которое нужно манипулировать.

Интересно, какая разница в производительности будет действительно be. Узнай это, и будет легче принять решение.

+0

Ну, примерно BIGINT - 8 байт. UID в VARCHAR - 10 байт. Таким образом, хранилище не лучший аргумент. Возможно, время процессора при работе с индексом - это ключ ... –

1

Это зависит от нескольких факторов. Прежде всего, насколько велик ваш сбор данных, мы говорим о тысячах UID или Миллионов? Если вас не волнует масштаб, если ваш проект, пытаясь найти самый маленький контейнер (большое целое число), тогда вы гораздо больше беспокоитесь о возможности масштабирования с изменениями.

Итак, теперь вам нужно выбрать VarChar разумного размера, который будет принимать любой формат UID и быть счастливым - это включает в себя ведущие нули и bigInt, которые легче дезинфицировать, но недружелюбно к ведущим нулям и буквам.

Если вы знаете, что UID всегда является неосновным нулевым или нулевым заполненным номером, тогда вы можете получить немного лучшую защиту путем дезинфекции путем литья по типу. Это и размер - все преимущества BigInt.

У VarChar есть падение размера - вам нужно знать наибольшую длину UID перед тем, как вы начнете, но ведущие нули, буквы и другие неожиданные материалы могут быть обработаны с небольшим исключением, что теперь вы очищаете строку.

С точки зрения программирования это делает очень мало шансов, так как UID - это только ярлык, который является уникальным.С индексом на нем я не должен думать, что в MySQL есть какая-либо разница в скорости, по крайней мере, не с распространенными моделями, которые он может использовать.

So best - это просто продукт того, что вам нужно больше всего от данных.

Смежные вопросы