Имея дело со многими Метаценностями, 30+
У меня есть тип записи "Список" с более чем 30 мета-ключами, которые, как мне кажется, могут вызвать нагрузку на базу данных, когда в ней более 100 сообщений. Обычно я сохраняю каждое мета-значение 1 на 1 примерно так:
if(isset($_POST['_item_stock']) && !empty($_POST['_item_stock']))
update_post_meta($post_id, '_item_stock', sanitize_text_field($_POST['_item_stock']));
else
delete_post_meta($post_id, '_item_stock');
Я делаю это, потому что, если мне нужно больше контроля над проверкой, он у меня есть. Он организован и красиво смотрится в коде. Недостатком является то, что он длительный и сохраняет каждую мету отдельно в базе данных.
Мой другой вариант - стандартизировать все мои мета в массив, затем сериализуйте его. Недостатком этого метода является то, что я не могу выполнять какие-либо мета-запросы к сериализованным данным, поэтому фильтрация поиска или упорядочение записей исключаются.
Последний вариант - сделать половину и половину, сериализовать то, что мне не нужно для запросов, и все остальное, что я сохраняю индивидуально. Хотя это может сэкономить некоторые накладные расходы, я не хочу, чтобы это выглядело беспорядочно в моем коде или имело какое-либо отключение.
Мой вопрос в том, как вы обычно обрабатываете сообщения, которые у вас много мета-ключей? Действительно ли накладные расходы базы данных так плохи, как я себе представляю, когда я сохраняю каждый мета-ключ по отдельности? Какой метод, по вашему мнению, является лучшим и почему?
1 answers
Вы столкнулись с проблемой XY. единственная причина сохранять мета-значения каждое в виде одной строки, если вам нужно, чтобы они были доступны для поиска. Если вам нужны особые правила дезинфекции, используйте либо filter_var_array()
или очистите значения, затем создайте массив и, наконец, сохраните значение.