2011-01-03 2 views
1

Можно ли извлекать данные из Redis из MySQL (используя встроенную функцию или какой-либо другой механизм)? Я хотел бы иметь возможность использовать эту информацию в операторах ORDER BY для подкачки с помощью LIMIT. В противном случае мне придется извлечь все данные из MySQL, получить дополнительные данные для каждой строки из Redis, отсортировать в своем приложении и сохранить нужную мне страницу.Можно ли вызвать Redis из MySQL?

Было бы гораздо эффективнее, если бы MySQL мог сказать, что функция для каждой строки получает данные от Redis, сортировка и отправка только мне страницы.

ответ

2

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

Кроме того, если результирующий набор невелик, доминирующая проблема с производительностью - это, как правило, латентность, а не обработка или передача данных. Один запрос из sql и одного mget из redis должен быть достаточно быстрым.

Если вам действительно нужен только один запрос при просмотре страницы, вам нужно будет иметь как записи, так и сортировку данных в одном месте - либо добавить данные из redis в качестве столбца в sql, либо кэшировать ваши запросы в списках redis.

+0

Хорошие баллы. Я мог бы попытаться накапливать данные в Redis и иметь фонового рабочего, который копирует его в MySQL время от времени. –

+0

Похоже, что хороший подход - если данные представляют собой какое-то количество просмотров, счетчики redis очень быстры для того, что должно произойти на каждом просмотре страницы, и, вероятно, потребуется некоторое время, чтобы подсчеты менялись настолько, чтобы повлиять на относительный порядок. –