Распределение учетных записей пользователей по N таблицам
-
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
Я рекомендую использовать встроенную возможность разбиения вашей базы данных, если она есть.