Как сохранить маркеры push-устройств для APNS / FCM в базе данных MySQL с индексом? - PullRequest
0 голосов
/ 08 июля 2019

Я хотел бы сохранить токен устройства APNS и регистрационный идентификатор FCM в базе данных MySQL. Мне нужен индекс для столбца, который содержит токен, потому что я буду выполнять поиск с его использованием и ожидаю, что таблица будет достаточно большой (миллионы строк).

Насколько я понимаю, нет никаких реальных ограничений на размер токена устройства, который использует APNS или FCM. Документация для APNS прямо заявляет, что она не делает предположений относительно размера (хотя это, кажется, 64 символа). В связи с этим я планировал сохранить его как поле длинного текста в базе данных MySQL. Однако MySQL предотвращает создание индексов, длина которых превышает 767 символов.

Вот варианты, которые я рассматриваю:

  1. Используйте текущий формат токенов APNS / FCM, чтобы установить максимальную длину поля, в котором я храню токены, чтобы я мог использовать индекс
  2. Использовать индекс префикса в поле длинного текста (не уверен, насколько это будет неэффективно?)

Какой из этих вариантов кажется лучшим способом для этого? Можете ли вы придумать альтернативные варианты?

1 Ответ

0 голосов
/ 08 июля 2019

Пожалуйста, не используйте тип данных CLOB (xxxTEXT) для этого. Они крайне неэффективны для хранения и индексации. Это маркер устройства, поэтому, даже если его длина не указана, он не будет составлять десятки килобайт (MEDIUMTEXT), не говоря уже о многих мегабайтах (LONGTEXT).

Похоже, что в настоящее время это 64 символа шестнадцатеричных цифр (0123456789abcdef). Таким образом, чтобы быть в будущем, вы можете использовать

 token VARCHAR(256) COLLATE latin1_bin NOT NULL

как определение столбца. 256, в четыре раза больше нынешнего размера, должно быть достаточно на некоторое время (это много мобильных устройств; адресное пространство IPV6 будет заполняться первым). И, набор символов latin1 и сопоставление bin сделают для эффективного поиска индекса.

...