Где хранить данные активности пользователя ?

На сайт будет добавлена возможность с ФРОНТЭНДА вносить изменения в пост:
1 Голосовать за уже добавленные термины (теги и тд) текущего поста - убирать их по достижению голосов или добавлять по достижению голосов
2 Добавлять уже существующие термины из кастомных таксономий к текущему посту
3 За активность у пользователя будет рости рейтинг

При обновлении поста - добавленные или проголосованные пользователем термины будут отмечается ЗЕЛЕНОЙ ОБВОДКОЙ через дополнительный класс. Клас будет присваивается на основании прочтения данных пользователя.

Вопрос: где хранить ?
1 в отдельной новой кастомной таблице
1.2 тогда как устроить логику ?

2 в post_meta не вариант - итак засран много чем

3 в user_meta почему-то меня смущает - там по-моему нужно хранить по проще вещи

4 Интересует также вопрос нагрузки перед формированием кода поста , так как нужно будет прочитать данные пользователя и вбить, на основании данных, нужные классы.

я совсем не знаю как правильно писать подобного рода логику, пока-что думаю о такой логике
создать новую таблицу со столбиками "user_id" и active_value

можно добавить разбивку по постам, добавив столбец post_id в таблицу, но пока не задумывался как она будет рости - на сайте 10 000 постов и 15000 пользователей - вероятных 150 000 000 строк меня смущает

в active_value буду писать :

{
	"post_id_345": [
				"taxonomy_id_1":["term_id_1", "term_id_2", "term_id_3" ],
				"taxonomy_id_2":["term_id_1", "term_id_2", "term_id_3" ]
				]
	"post_id_678": [
				"taxonomy_id_1":["term_id_1", "term_id_2", "term_id_3" ],
				"taxonomy_id_2":["term_id_1", "term_id_2", "term_id_3" ]
			]
}

таблицу пока создал так

    function create_table() {
			global $wpdb;

			require_once ABSPATH . 'wp-admin/includes/upgrade.php';

			$table_name = $wpdb->get_blog_prefix() . 'users_activity';
			$charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->collate}";
			// // название - тип(количество символов) - не использовать отрицательные числа
			// # описание
			// UNSIGNED - не использовать минусовое значение -1
			// edit_datetime - ON UPDATE CURRENT_TIMESTAMP - обновлять время ячейки строки при обновлении данных
			$sql = "CREATE TABLE {$table_name} (
			meta_id  bigint(20) UNSIGNED NOT NULL auto_increment,
			user_id  bigint(20) UNSIGNED NOT NULL default '0',
			post_id  bigint(20) NOT NULL default '0',
			meta_value LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL,
			edit_datetime DATETIME NOT NULL ON UPDATE CURRENT_TIMESTAMP,
			PRIMARY KEY (meta_id),
			KEY user_id (user_id),
			KEY post_id (post_id)
			)
			{$charset_collate};";

			dbDelta($sql);
		}

		 // create_table(); // нужно раскомментировать
Заметки к вопросу:
kolshix 3.1 год назад

Столбец с id_post всё-таки придется добавить, иногда бывает нужно удалить пост, и не хочется чтоб данные этого поста оставались

Kama 3.1 год назад

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

kolshix 3.1 год назад

подумал :
Рейтинг буду хранить и обновлять в user_meta
Для ловли действий будет 4+ столбика в отдельной таблице

  1. Уникальный meta_ID
  2. Тип Элемента: комментарий, оценка, пост и т.д.
  3. ID элемента - для комментариев, постов и оценок - для терминов не нужно, они пишутся в value
  4. Value
  5. User Id
  6. edit_datetime

Теперь будет легко зацепится за удаление термина или поста - и в коде сделать выборку\запрос, по типу и id, на удаление данных из таблицы при удалении термина или поста

Так возможно будет создать страницу статистики и просмотра данных о постах и активности.

anseme 3.1 год назад

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

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

kolshix 3.1 год назад

Буду строить аналог post_meta - индексы подобным образом выставлю

Структура бд