Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Один большой запрос или много маленьких / 8 сообщений из 8, страница 1 из 1
18.08.2013, 20:22:47
    #38370127
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один большой запрос или много маленьких
Доброе время суток. Помогите советом, пишу для сайта функцию личных сообщений с вложенными файлами. В одном сообщении можно прикрепить несколько файлов.Для файлов создал отдельную таблицу, как положено. Вопрос в том, как эти файлы вытаскивать при просмотре списка личных сообщений. Можно составить один большой запрос в котором запрашиваются все файлы к выведенным на экран личным сообщениям. Или уже в момент публикации на экран списка сообщений запрашивать к каждому сообщению прикрепленные файлы?
Может ошибаюсь, но второй вариант мне кажется лучше, есть возможность закешироваться запросам, но не дает покоя, что их уж будет много.
...
Рейтинг: 0 / 0
18.08.2013, 21:28:21
    #38370143
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один большой запрос или много маленьких
ldar,

на добавление в базу, лучше добавлять сразу (multiple insert)

а вот чтение . тут эксперементально.

Нащот кеширования.

приведу надуманый пример, а дальше думай сам.

у нас социальная сеть, для каждого юзера есть список сообщений(первые 50) скажем, вторая страничка вторые 50 и подобное.

и есть возможность отфильтровать список из 50 - показать только от девочек, или только от мальчиков.

скорей всего выгодно закешировать будет список всех 50, а прииспользовании фильтра, фильтровать уже в скрипте.


ЗЫ мысль понял? иногда выгодней ради кеширования, кешировать более общий результат, а потом скриптом дофильтровывать при выводе, чем запрашивать выборку заново.
...
Рейтинг: 0 / 0
18.08.2013, 21:41:10
    #38370152
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один большой запрос или много маленьких
alex564657498765453,
Если честно не до конца понял, вы предлагаете вытаскивать все прикрепленные файлы к 50 сообщениям сразу? То тогда никакого кеширования не будет, ведь при добавлении одного сообщения уже будет производится выборка других 50 сообщений, ну и так же при фильтрации.
...
Рейтинг: 0 / 0
18.08.2013, 23:08:45
    #38370189
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один большой запрос или много маленьких
ldar,

я не предлагаю, а привел пример. юзер читая свои сообщения будет часто попадать на список первых 50!!! вот их явно можно захотеть в кеш кинуть, на если ещо есть варианты фильтра, то фильтровать лучше кодом. а ты уже сам смотри.

тебя ведь этот момент смущал, что кешировать по отдельной ситуации - много, а всё скопом, то скриптом надо будет отфильтровывать. - я тебе написал. в кеширование более общего результата и доконца фильтровать в скрипте нет ничего плохого. такое используют.
...
Рейтинг: 0 / 0
18.08.2013, 23:12:11
    #38370192
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один большой запрос или много маленьких
ldar,

так ты файлы в базе данных кранишь??? зачем??.

а ещо можно делать ещо проще..если тебе файл больше никак не нужен, только для отображения ссылок вконтексте сообщений. - так толкай сразу в поле таблицы сообщения серилизованый масив - информаци о файлах.

ИЛИ у тебя есть опция - просмотр фложеных файлов только картинок, или вывести отдельно мп3 файлы из всех сообщений?
...
Рейтинг: 0 / 0
18.08.2013, 23:15:48
    #38370194
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один большой запрос или много маленьких
ldarДля файлов создал отдельную таблицу, как положено.А как Вы ее сделали... что там храните, как она связана с таблицей сообщений?
...
Рейтинг: 0 / 0
19.08.2013, 09:48:03
    #38370306
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один большой запрос или много маленьких
alex564657498765453, меня смущает как лучше, логичней и эффективней использовать запросы, сразу запросить файлы к 50 сообщениям. Или 50 запросов на каждое сообщение.
К примеру (пишу код на коленке)
Код: sql
1.
SELECT * FROM tbl_file_cross_message t0 LEFT JOIN tbl_cross_message t1 ON t1.id=t0.id_cross_message AND t1.id_user_from=:USER AND t1.id_user_to=24 LIMIT 50


или 50 раз вызвать
Код: sql
1.
SELECT * FROM tbl_file_cross_message t0 WHERE t0.id_cross_message=N1...N50;


Второй вариант ИМХО лучше, так как эти запросы с легкостью закешируются в mysql и будут летать как пули.
Но смущает что количество запросов 50. Но припоминается что сам mysql под капотом JOIN пропускоет через FOR, т.е. получается те же 50 запросов, но уже под капотом.
А насчет таблицы с файлами, я храню только имя файла и его относительный путь а связь происходит обычным ключом по id_message c таблице сообщений
...
Рейтинг: 0 / 0
19.08.2013, 19:54:02
    #38371174
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один большой запрос или много маленьких
Видимо я всех запутал своим объяснением)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Один большой запрос или много маленьких / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]