Обмен опытом из собственного опыта (годичный проект с тысячами пользовательских запросов в секунду).
Обычно для меня было два сценария:
- Добавить новую информацию всуществующие структуры (например, поле «email» для пользователя)
- Удаление или изменение существующих значений в существующих структурах (например, изменение формата некоторого поля)
- Удаление содержимого из базы данных
Для 1 я придерживаюсь следующей простой стратегии: изящно ухудшается , например, если у пользователя нет записи электронной почты - обрабатывать ее как пустую электронную почту.Работал все время.
Для 2 и 3 это зависит от того, могут ли данные быть изменены / рассчитаны / исправлены до выпуска или после.Я запускаю работу с базой данных, которая выполняет всю работу за меня, для нескольких миллионов ключей это занимает значительное время (минуты).Если это задание можно запустить только после того, как я выпущу новый код - тогда изящное уменьшение очень помогает, я просто освобождаю и запускаю задание.
PS: Если вы затрагиваете много ключей в redis, то этоочень важно использовать http://redis.io/topics/pipelining Экономит много времени.
- Возьмите список всех затронутых (т.е. вы хотите исправить их любым способом) ключей или записей в конвейере
- Делай с ними что хочешь.Если это возможно, попробуйте поставить в очередь операции записи в конвейер.
- Отправлять операции с очередями в Redis.
Также очень важно создавать индексы для ваших структур.Я держу наборы с идентификаторами.Затем я просто перебираю SMEMBERS (set_with_ids).Это намного лучше, чем перебирать команду KEYS.