Redis - обработка изменений в структурах данных - PullRequest
2 голосов
/ 05 января 2011

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

Например, позвольте мне сказать, что я собираю информацию о пользователе и использую user_id в качестве ключаи вывод других данных о пользователе в виде значений, разделенных запятыми.

user_id: name, email, etc.

Теперь, скажем, после примерно 100 000 записей, я понимаю, что мне нужно запросить по email - как бы я сейчас сделал снимоксуществующих данных и создать для них новый индекс?

Ответы [ 2 ]

1 голос
/ 06 января 2011

Использование CSV не очень хорошая идея, если вы хотите поддержать изменения. Вам нужно использовать сериализатор, который обрабатывает пропущенные / новые значения, если все находится в одном ключе, или вы можете использовать хэш redis, который дает вам именованные подключи. В любом случае вы можете добавлять / удалять поля с единственным требованием, чтобы ваш код знал, что делать, если он читает запись без нового значения.

Чтобы разрешить поиск по электронной почте, необходимо добавить индекс - в основном ключ (или список) для каждого электронного письма с идентификатором пользователя в качестве значения. Вам нужно будет заполнить этот индекс, получив все ключи один раз, а затем убедитесь, что вы обновляете его при изменении электронной почты.

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

0 голосов
/ 06 января 2011

Из моего понимания Redis это потребует чего-то, на что Redis не предназначен.Вы должны будете зациклить все свои записи (используя ключи *), а затем изменить порядок данных и создать новый ключ.Я лично рекомендовал бы использовать список вместо строки, разделенной запятой.В списке вы можете изменить его порядок внутри Redis.Список Redis выглядит следующим образом:

"Colum" => [0] c.mcgaley@gmail.com
            [1] password
            [2] Something

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

"Colum" => [0] c.mcgaley@gmail.com
            [1] password
            [2] Something
"c.mcgaley@gmail.com" => "Colum"

Чтобы я мог запросить идентификатор или адрес электронной почты и получить необходимую информацию.

Извините, что не смог ответить на вашвопрос.Просто надеюсь, что это помогло.

...