Распределение учетных записей пользователей по N таблицам

StackOverflow https://stackoverflow.com/questions/824754

  •  05-07-2019
  •  | 
  •  

Вопрос

Существуют миллионы учетных записей пользователей, и я хочу распределить их данные по N таблицам (user_1, user_2, ..., user_N) базы данных. Аккаунты пользователей состоят из 3 ~ 8 символов. Итак, я хочу функцию, которая возвращает суффикс таблицы вроде

  int getTableSuffix(String userAccount);

Результатом является равномерное распределение от 1 до N.

Вам известен какой-нибудь дешевый алгоритм хеширования для этой работы?

Это было полезно?

Решение

Вы можете взять значение ascii для первых 1-3 символов и найти их произведение, чтобы вернуть свой номер.

Кроме того, вы можете использовать символы в качестве префикса таблицы, например. Users_AA, Users_AB и т. Д.

Какую базу данных вы используете для этих данных? В большинстве современных баз данных вам не нужно создавать несколько таблиц для хранения одних и тех же данных. Даже с миллионами записей. Хорошей индексации на вашей таблице должно быть более чем достаточно для решения любых проблем с производительностью, которые могут у вас возникнуть.

Другие советы

Непонятно, ищите ли вы строковую хеш-функцию или метод разделения на основе строк.

Хорошая строковая хеш-функция использует каждый символ и учитывает положение символов. Например, djb2 использует что-то вроде этого (псевдокод):

hash = 5381
foreach (ch in str) 
  hash = hash * 33 + ch

Каким бы ни был ваш хэш, разделите его на количество таблиц с помощью операции по модулю:

table = hash % count

Я рекомендую использовать встроенную возможность разбиения вашей базы данных, если она есть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top