У меня около 10 миллионов + пользователей с электронной почтой и телефонами. Оба указывают на идентификатор пользователя. Я создал 2 Хэша. Один для электронной почты, а другой для телефонных номеров, таких как
//A single user with Both Email and Phone number pointing to same User ID
$redis->hSet('email-users', 'abc@xyz.com', 1);
$redis->hSet('phone-users', '+192938384849', 1);
Теперь, когда вокруг миллионы пользователей, Hash
становится перегруженным, и я также хочу искать по этим хэшам. Как я хочу получить идентификатор пользователя из электронной почты от пользователей электронной почты ha sh.
Поскольку я обнаружил, что хеши должны поддерживаться с ZipList на Redis - лучший способ сохранить большую карту ( словарь) и разделен на меньшие сегменты фиксированного размера, скажем, максимум 10000 ключей в одном га sh.
Итак, если я разделю свои 10 миллионов пользователей на сегменты по 10000 ключей, будет около 1000 хэшей для электронных писем и 1000 для телефонных номеров.
Мои вопросы: стоит ли разделять пользователей на эти 1000 сегментов? и если да, то как я могу найти эти 1000 ведер? Или есть лучшая альтернатива?
PS Я использую PHP
и получаю через них все 1000 хешей и l oop, что может быть довольно ресурсоемким, и я боюсь, что использование неправильного подхода приведет к также убивают фактическую производительность Redis
Power.
Просто для заметки, я думаю, что мы можем создать некоторый алгоритм, такой как libketama, для согласованного хеширования для размещения ключей на случайных серверах.
Кроме того, если сложно работать с алфавитами, мы можем сначала преобразовать каждое письмо в числа, такие как a = 1, b = 2, c = 3 ... z = 26 с добавлением 0 (ноль) для создания это уникально и + s для @ и. персонажи. Например,
abcd@gmail.com -> 10203040+901301090+3015013
Итак, теперь у нас есть числа, которые облегчают применение любых вычислений.