- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здраствуйте.
Такая ситуация. Есть база данных MySQL, в которой имеется около 20 таблиц, каждая из которых соответствует определенной категории. Структура этих таблиц одинакова:
При чем параметр id уникален только для своей таблицы. Data - дата добавления определенной записи.
Мне нужно на главной странице вывести список, состоящий из n последних записей. Проблема в том, что они могут быть раскиданы по разным таблицам. Дайте совет по решению этой проблемы :confused:
P.S. Можно просматривать все 20 таблиц при выводе, но это ресурсоемкое занятие.
если техническая возможность позволяет, я бы сделал отдельную таблицу "last-n-news", в неё записывал данные, параллельно с этими двадцатью таблицами, потом уже выводил последние n из этой одной таблицы.
чистить таблицу можно, например, по крону раз в сутки, оставляя последние n записей
Создайте или HTML или отдельную таблицу и по крону её обновляйте каждые 30 минут из всех 20 таблиц и всё.
Я бы на вашем месте сделал представление из всех 20 таблиц. И уже из этого представления кешировал бы как написал LEOnidUKG. Время жизни кеша например 30 мин, если пользователь заходит на сайт, проверяется кэш, если он жив уже более 30 минут , то генерится запрос в базу и записывается новый кэш при это выводя информацию пользователю. Следующий пользователь зайдя уже увидит из кэша инфу.
При добавлении новости в любую таблицу, вставлять её также и в last_news, при этом же удалять самую старую запись. ☝ Это на будущее.
Еще могу сказать, что судя по моим экспериментам с оптимизацией mysql запросов, лучше 20 простых запросов, чем один навороченный.
Извиняюсь, забыл указать в первом посте, что помимо вывода первых n записей, также может понадобиться вывод и следующих n записей и т.д.
отдельную таблицу "last-n-news"
Рассматривал такую идею, но с учетом того, что я написал выше, получится, что таблица будет довольно большой. Хотя использую этот вариант как запасной.
Если делать так, то получится ограниченное число записей, которое допустимо для вывода:
вставлять её также и в last_news, при этом же удалять самую старую запись.
LEOnidUKG, md5by, спасибо, но я не уверен, что это то, что мне нужно
Сложно сказать т.к. непонятна сама структура БД. я бы сделал сводную таблицу из нех данных которые будут отображаться на главной(сомневаюсь что используются абсолютно все поля). причем создал бы еще одно поле, где бы при добавлении записи, или кроном генерировал уже результирующий HTML. думаю даже если бы таблица оказалась большой - все равно запрос был бы мгновенный если конечно правильно расставить индексы.
ex-cept, я тут прикинул, что одновременно на вывод могут понадобиться около 100-200 записей. Если в таблице с последним материалом будет около 2000 записей, то такой вариант мне более подходит.
Хотя все равно продолжаю искать альтернативу.
:) не проблема у меня в таблице котоло 300тыс записей. одновременно сидящих на сайте 100-150 пользователей в один момент времени.
пока сервер справляется top показывает 0.3-0.7 :)
ex-cept, я тут прикинул, что одновременно на вывод могут понадобиться около 100-200 записей. Если в таблице с последним материалом будет около 2000 записей, то такой вариант мне более подходит.
Хотя все равно продолжаю искать альтернативу.
А одним запросом вывести последние записи, не?
А одним запросом вывести последние записи, не?
С реализацией проблем нет. Тут загвоздка в том, что записи находятся в разных таблицах (читать первый пост).