2013-12-03 2 views
1

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

В настоящее время у меня есть данные пользователя (адрес электронной почты, пароль, дата создания и т. Д.) В хеше с именем user:(incremental uid). И ключ email:(email) со значением (same incremental uid).

Когда кто-то входит в систему, приложение просматривает ключ, соответствующий электронной почте с email:(email), чтобы вернуть (incremental uid) для доступа к данным пользователя с помощью user:(incremental uid).

Это прекрасно работает, если количество пользователей достигает миллионов (возможно, но несколько отдаленная проблема), размер моей базы данных резко возрастет, и я начну сталкиваться с некоторыми проблемами.

Я задаюсь вопросом, как хэш по электронной почте до целого числа, которые я могу использовать для сортировки в хэш, как это (псевдокод):

hash([email protected]) returns 1234 
1234 % 3 or something returns 1 
store { [email protected] : (his incremental uid) } in hash emailbucket:1 

Затем, когда мне нужно для поиска этого идентификатора пользователя для электронной почты [email protected] я использую подобную процедуру:

hash([email protected]) returns 1234 
1234 % 3 or something returns 1 
lookup [email protected] in hash emailbucket:1 returns his (incremental uid) 

Итак, мои вопросы в виде списка:

  1. Is это практично/есть лучший способ?
  2. Как я могу отправить электронное письмо на несколько цифр?
  3. Каков наилучший способ организовать эти хэши в ведрах?

ответ

0
  1. Возможно, это не будет иметь большого значения. Redis не имеет целочисленного типа, поэтому вы сохраняете только несколько байтов (и меньше каждый раз, когда ваш счетчик переходит к следующей цифре). Выполняя некоторую математику салфетки, у миллиона пользователей разница в фактическом хранении будет ~ 50 мб. С жесткими дисками в диапазоне < $ 1/gb это не стоит того времени, которое потребуется для реализации.
  2. Как мысленный эксперимент, вы можете сохранить ключ, который является вашим текущим счетчиком пользователя, и только GET и INCR каждый раз, когда вы добавляете нового пользователя.
-1

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

Прочитайте эту статью для получения дополнительной справки http://instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-value

+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow.com/q/8259), чтобы включить основные части ответа здесь , и предоставить ссылку для справки. – Tunaki

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

  • Нет связанных вопросов^_^