Распределение учетных записей пользователей по N таблицам - PullRequest
1 голос
/ 05 мая 2009

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

  int getTableSuffix(String userAccount);

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

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

Ответы [ 2 ]

1 голос
/ 05 мая 2009

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

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

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

0 голосов
/ 05 мая 2009

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

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

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

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

table = hash % count

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...