Что более эффективно? Использование usermeta или создание новой таблицы MySQL?

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

Та же концепция может быть применена для многих вещей в WordPress, таких как рейтинги сообщений, post favoriting и т. Д. До сих пор я создавал для этих функций новые таблицы MySQL (подход 2), но теперь я уже догадываюсь.

Два варианта подхода:

1. Использование таблицы wp_usermeta

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

2. Создание новой таблицы

С помощью этой опции мне не пришлось бы сериализовать данные, но каждый новый маркер получил бы свою собственную строку, которая должна была бы иметь user_id, post_id и, возможно, временную метку внутри.

Каков наиболее эффективный метод подхода?

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

Solutions Collecting From Web of "Что более эффективно? Использование usermeta или создание новой таблицы MySQL?"

Нормализация данных более эффективна, а сохранение сериализованных данных в поле таблицы, которое вы хотите искать / работать на уровне БД, не является чем-то для RDBMS Non-Nosql, например MySQL / MariaDB. Поиск этих полей неэффективен, вы не можете использовать индексы на нем, не можете присоединиться к нему, и, как правило, больно разрабатывать imho. Если вы сохранили эти данные в сериализованном блоке PHP, вам придется загружать каждую строку, чтобы проверить ее, потому что база данных не может выполнить эту работу для вас (или писать очень уродливые регулярные выражения, которые могут взорваться, если кто-либо когда-либо чувствует, как добавлять другие данные в это поле).

Тем не менее, если у вас нет больших объемов данных, вы, вероятно, не будете «чувствовать» неэффективность секундных часов на простых запросах, и может быть проще работать с метаполями пользователей в зависимости от того, насколько опытные разработчики (или те, которые будут отвечать за него после того, как вы его доставите) находятся в базах данных.