Intereting Posts
Добавить дату с детской темы и изменить размер шрифта на главной странице Могу ли я скрыть вложения с носителя, который я загрузил с лицевой стороны? Добавление другого слова перед почтовым адресом Как конвертировать контактную форму 7 в сообщение после отправки? Переопределить файл в родительской теме Плагин Favicon для WordPress работает в сетевом режиме (multisite)? Сброс CSS для переднего конца плагина? Как добавить дополнительные поля в форму bbPress Как установить привилегию для подписчика wordpress для личной страницы почему я не получаю сообщения об ошибках в admin при разработке? Как остановить фатальную ошибку при загрузке файла шаблона темы напрямую Добавить пользовательские классы для привязки в wp_nav_menu Сбросить контактную форму recaptcha 7 Фильтрация сообщений по настраиваемому значению поля не работает mod_rewriting конфликт с WP permalinks в htaccess

WordPress usermeta масштабирование для тысяч пользователей

Я разработал CRM-плагин для клиента, интегрированного с пользовательским управлением WordPress, и я сохранил дополнительную информацию для каждого пользователя в таблице wp_usermeta .

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

Есть ли у кого-нибудь опыт управления таким количеством пользователей способом WordPress? Должен ли я добавлять столбцы в таблицу wp_users вместо того, чтобы полагаться на wp_usermeta ? Как я могу диагностировать / профиль WordPress и свою собственную производительность кода на данном этапе?

Я никогда не работал над таким количеством данных и с такой растущей скоростью, и любой указатель был бы ценным.

Solutions Collecting From Web of "WordPress usermeta масштабирование для тысяч пользователей"

Размер таблицы на самом деле не является проблемой, запросы, которые вы используете в этой таблице, могут быть.

Например, если вы выбираете пользователей на основе данных, хранящихся в таблице user-meta, тогда этот запрос будет сильно неоптимизирован, так как meta_value не является индексированным полем. В этом случае вам может потребоваться добавить дополнительные индексы или рассмотреть возможность хранения этих данных другим способом, например, с помощью пользовательской таксономии.

Вообще говоря, материал, который вы храните как мета, никогда не должен быть тем, на что вы будете искать только на основе. Это применимо ко всем мета-таблицам в WordPress. Meta в основном предназначена для того, чтобы вытащить мета-ключ, а не meta_value. Таксономии ограничивают возможные значения множеством и упорядочивают информацию по-разному, поэтому они улучшаются, когда «значение» учитывается как то, что вы выбираете.

Обратите внимание, что выбор как meta_key, так и meta_value обычно хорошо, потому что mySQL сначала оптимизирует запрос на основе meta_key, уменьшая количество данных для поиска в (возможно) управляемом лимите. Если даже это становится проблемой, вы можете «исправить» ее, добавив новый индекс в мета-таблицу с метафайлами meta_key и meta_value в индексе, однако, поскольку meta_value является LONGTEXT, вам нужно ограничить длину этого индекса чем-то разумным, например, 20-30 или что-то в зависимости от ваших данных. Обратите внимание, что этот показатель может быть намного больше, чем ваши фактические данные, и значительно увеличит требуемое пространство для хранения. Однако при этих типах запросов это будет намного быстрее. Проконсультируйтесь с квалифицированным администратором баз данных, если это когда-нибудь станет реальной проблемой.

Для справки, на WordPress.org зарегистрировано около 11 миллионов пользователей. Количество мета изменяется для каждого пользователя, возможно, минимум 8 строк на каждый, и, возможно, максимум около 250-иш. Таблица пользователей составляет около 2,5 ГБ, таблица usermeta – около 4 ГБ. Кажется, что работает нормально, по большей части, но время от времени мы находим какой-то нечетный запрос, который нам нужно оптимизировать.

Если вы не используете свои собственные запросы вместо использования API, размер таблицы не имеет значения, так как WordPress запускает запросы по индексам таблицы, а MYSQL должен оптимизировать такие запросы. Каждый запрос также извлекает всю метаинформацию в одном запросе.

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

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