Имея дело со многими Метаценностями, 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');

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

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

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

Мой вопрос в том, как вы обычно обрабатываете сообщения, которые у вас много мета-ключей? Действительно ли накладные расходы базы данных так плохи, как я себе представляю, когда я сохраняю каждый мета-ключ по отдельности? Какой метод, по вашему мнению, является лучшим и почему?

Author: Howdy_McGee, 2014-05-09

1 answers

Вы столкнулись с проблемой XY. единственная причина сохранять мета-значения каждое в виде одной строки, если вам нужно, чтобы они были доступны для поиска. Если вам нужны особые правила дезинфекции, используйте либо filter_var_array() или очистите значения, затем создайте массив и, наконец, сохраните значение.

Суть с исчерпывающим примером filter_var_array() здесь.

 5
Author: kaiser, 2017-03-20 10:29:37