- 13, May 2024
- #1
Какая структура лучше?
У меня есть собственная CMS, где я хочу отслеживать посещения страниц.
У меня сейчас 2 варианта.
1. Я создаю столбец «СРЕДНИЙ ТЕКСТ» в той же таблице, где хранятся данные страницы,
и я продолжаю добавлять IP/UserAgent в этот столбец при каждой загрузке страницы.
Средний текстовый столбец имеет ограничение в 16 МБ, а мой PHP Memory_limit превышает 30 МБ, поэтому нехватка памяти не является проблемой.
Большинство общих хостов имеют примерно столько же, поэтому даже если сайт переместится, это не будет проблемой.
Проблема в том,
для каждой загрузки страницы во внешнем интерфейсе мне придется извлекать эти 16 МБ данных, добавлять к ним новую строку и обновлять запись таблицы.
Может стать проблемой, если трафик высокий, ресурсы сервера будут слишком перегружены.
CONCAT, похоже, не работает с MediumText и LongText на моем общем сервере, не знаю почему...
2. Я добавляю новую таблицу и сохраняю в ней IP/UserAgent.
Загрузка главной страницы будет быстрее, потребуется только быстрая вставка.
Однако на заднем плане, когда я проверю статистику,
тогда очень огромную таблицу придется читать снова и снова.
Предположим, что страниц 100, тогда данные о посещениях всех 100 страниц будут храниться в этой таблице.
Это может вырасти очень сильно.
Таким образом, выполнение одного запроса означало бы чтение этой огромной таблицы снова и снова.
Например, если я хочу посчитать общее количество посещений за одну неделю, затем за месяц, а затем за отдельные дни, это может быть...
Невозможно установить ограничение в этом типе запроса на подсчет...
Конечно, будут индексы и т. д., но меня все еще беспокоит размер.
Однако, если это просто средний текстовый столбец, в самой таблице страниц,
затем я просто извлекаю максимум 16 МБ данных для конкретной страницы и использую PHP для остальной обработки.
Это дешевле на бэкэнде и, вероятно, быстрее.
Какой из них вы бы предложили?
У меня есть собственная CMS, где я хочу отслеживать посещения страниц.
У меня сейчас 2 варианта.
1. Я создаю столбец «СРЕДНИЙ ТЕКСТ» в той же таблице, где хранятся данные страницы,
и я продолжаю добавлять IP/UserAgent в этот столбец при каждой загрузке страницы.
Средний текстовый столбец имеет ограничение в 16 МБ, а мой PHP Memory_limit превышает 30 МБ, поэтому нехватка памяти не является проблемой.
Большинство общих хостов имеют примерно столько же, поэтому даже если сайт переместится, это не будет проблемой.
Проблема в том,
для каждой загрузки страницы во внешнем интерфейсе мне придется извлекать эти 16 МБ данных, добавлять к ним новую строку и обновлять запись таблицы.
Может стать проблемой, если трафик высокий, ресурсы сервера будут слишком перегружены.
CONCAT, похоже, не работает с MediumText и LongText на моем общем сервере, не знаю почему...
2. Я добавляю новую таблицу и сохраняю в ней IP/UserAgent.
Загрузка главной страницы будет быстрее, потребуется только быстрая вставка.
Однако на заднем плане, когда я проверю статистику,
тогда очень огромную таблицу придется читать снова и снова.
Предположим, что страниц 100, тогда данные о посещениях всех 100 страниц будут храниться в этой таблице.
Это может вырасти очень сильно.
Таким образом, выполнение одного запроса означало бы чтение этой огромной таблицы снова и снова.
Например, если я хочу посчитать общее количество посещений за одну неделю, затем за месяц, а затем за отдельные дни, это может быть...
Невозможно установить ограничение в этом типе запроса на подсчет...
Конечно, будут индексы и т. д., но меня все еще беспокоит размер.
Однако, если это просто средний текстовый столбец, в самой таблице страниц,
затем я просто извлекаю максимум 16 МБ данных для конкретной страницы и использую PHP для остальной обработки.
Это дешевле на бэкэнде и, вероятно, быстрее.
Какой из них вы бы предложили?