Что быстрее:много файлов или один mysql запрос?

12
humbert
На сайте с 16.03.2006
Offline
536
1920

Есть база данных - описания товаров. На страницу выводится 40 (примерно) описаний товаров.

Что будет быстрее работать - подгрузка из 40 файлов или один запрос к БД?

Парсинг прайс-листов, наполнение интернет-магазина товаром. (https://humbert.ru) Любая CMS (Битрикс, OpenCart, Prestashop и даже Woo Commerce )
wir
На сайте с 14.07.2009
Offline
178
wir
#1

один запрос к БД

Твоя партнерская сеть - конвертит все! (https://aff1.com)
PyMbIH
На сайте с 22.11.2009
Offline
76
#2

БД однозначно

humbert
На сайте с 16.03.2006
Offline
536
#3

Спасибо, понял.

Bitman
На сайте с 05.07.2009
Offline
112
#4

Смотря что за хостинг, как нагружен. Так что не факт. Надо экперемент ставить.

Северный лес (https://euro-vagonka.by) DREW (https://drew.by) AvtoDrive (https://avtodrive.by)
sowich
На сайте с 11.06.2007
Offline
26
#5

ну дак если так рассуждать то можно сказать смотря какой sql запрос будет и как спроектирована БД, так что не факт что из файлов будет браться дольше.

Мой блог (http://sowich.info) Пишу скрипты на php, perl - велком!
ФР
На сайте с 27.08.2008
Offline
22
#6

Смотря как настроена база, и на чём написан сборщик из пачки файлов, как часто к этим файлам обращаются.

Давайте рассмотрим как обрабатывается запрос к базе.

1 Запускается приложение (вероятно скрипт на php?)

2 Делается запрос через unix или inet socket.

3 База парсит запрос и ищет в себе наличие соответствий.

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

то некоторе количество данных будут в памяти mysl'я. Соответственно он выполнит запрос быстро. Если на машине с базой недостаточно памяти, или mysql настроен так, что не может выделять достаточное количество памяти для кэширования, то он эти действия будет выполнять на жестком диске.

4 результат по тому-же сокету едет к скрипту который формирует ответ и выдаёт посетителю.

Рассмотрим вариант, когда выгребается пачка файлов.

1 Пусть запускается всё тот-же php скрипт

2 Последовательно считывает в свой буфер в памяти пачку файлов с диска.

и формирует ответ.

Тут есть тонкость. файловая система имеет свои кэши. Если к этим файлам идут обращения чаще, чем у другим, то высока вероятность того, что файлы уже в этом кэше.

3 Выдаёт ответ посетителю сайта.

Так вот. В случае если данные требуются и достаточно часто получаются будь то из базы или с диска, то они скорее всего в памяти мускула или файловой системы.

Однако, mysql это userland, тоесть процесс выполняющийся на уровне пользователя, а вот файловая система работает на уровне ядра.

Кроме того, обращения к mysql'ю через сокет это лишние накладные расходы как на cpu, так и на память. Что тоже сказывается на скорости выполнения общей задачи.

Мой (imho) вывод. При прочих равных быстрее будет выдача, если собирать файлы с диска.

[Удален]
#7

Фёдор Романов,

а можете объяснить с flash.

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

wdsg
На сайте с 09.02.2009
Offline
31
#8

Отличный вопрос! Когда-то долго мучился, пытаясь найти однозначный ответ. Не нашел. Но в результате решил действовать по следующему принципу:

1. Относительно большие объёмы атомарной для логики системы информации (те же описания товаров, например) хранить в ФС и подгружать непосредственно при сборке выдачи.

2. Постоянно задействованные, но редко изменяемые структуры, кешировать в ФС, пересобирая из БД только при изменении. Это я к тому, что очень часто, как не странно, можно столкнуться с такими "перлами", как сборка древовидной структуры меню из БД при каждом пинке.

3. Числовые значения и значения, по которым планируются выборки/сортировки, разумеется в БД.

4. Каждый проект имеет массу своих особенностей. Никогда нельзя сказать со 100% точностью, какая схема хранения и доступа к данным будет наиболее рациональна. Надо пробовать.

Проектирование и разработка сложных IT-систем. Вожусь с проблемными задачами.
ФР
На сайте с 27.08.2008
Offline
22
#9
AustinTX:
Фёдор Романов,
а можете объяснить с flash.
у меня сейчас задача, есть XML файлы с языками интерфейса, русский английский и т.д.. 8 штук на каждый язык. при щелчке по выпадающему меню должен переключаться язык интерфейса без перезагрузки. что лучше забирать данные из xml или залить интерфейс в базу данных и получать оттуда запросами?

Так флэшом всасывать по http статический xml файл. Причём тут база вообще? Это ведь не cgi генерируемый контент.

И вообще можно подгружать язык исходя из http заголовка запроса браузера передающего язык. Сделать это рерайтом. Меньше надо будет переключать язык.

humbert
На сайте с 16.03.2006
Offline
536
#10

Ситуация такая.

Есть БД, в ней таблица с описанием товара (имя, ID, краткое описание, полное описание). При запросе группы товаров выбираются поля: имя, ID, краткое описание. Всего 40-50 штук за раз. В БД их более 5.000, вес таблицы 27 мб.

Если сделать так, что выбирается только имя и ID, а по списку ID из файлов уже короткое описание?

Нагрузка на сервер небольшая, но хотелось бы предусмотреть нагрузку.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий