@jle34925

Что быстрее 10 запросов к файлам или 10 к базе?

При формировании страницы необходимо взять информацию из 10ти локальных файлов и распарсить их, получив данные для страницы и вывести или можно брать не из файлов, а из mysql базы - делать 10 запросов. Что лучше?
  • Вопрос задан
  • 4693 просмотра
Пригласить эксперта
Ответы на вопрос 8
27cm
@27cm
TODO: Написать статус
Что быстрее: спросить на тостере или проверить самому?
Ответ написан
@sergey_privacy
Админ со стажем, начинающий DevOps
На Ваш вопрос нет однозначного ответа. Аналогично вопросу: что быстрее, поезд или автомобиль? Кто то будет сравнивать советский поезд с бугатти, другой будет сравнивать японские скоростные поезда с жигуленком.

Базы с поддержкой SQL бывают разные: MySQL, MsSQL, Oracle и т.д. У каждой из них своя методика работы с кэшем, индексами, памятью. Очень многое зависит от размеров базы, размеров таблиц, построения индексов, самого запроса, настроек сервера БД и операционки. Если база нормально сконфигурирована, таблицы с нормальной архитектурой, правильно построены индексы, сервер обладает достаточным количеством памяти, то запрос будет быстрее большинства самопальных решений для работы с файлами.

Если же файлы проектировала группа высококлассных специалистов, обвязка спроектирована именно под такие запросы, то выигрыш по скорости может быть значительным в этом варианте. Но такой "путь самурая" предполагает перенос объема вычислений в более быструю область сервера: память-процессор. У тебя будет меньше работа с дисковой системой, но вся логика работы приложения должна быть перелопачена под такой вид данных. Без фундаментальных знаний алгоритмов программирования и математики-информатики в целом, такие велосипеды лучше не городить. Теория графов, матрицы, хеши, алгоритмы сортировки должны быть у тебя на уровне выше институтского. Про удобные таблицы на 5-10 полей можешь забыть. У тебя будет куча небольших упорядоченных файлов со списками ключ-значение. Индексы, хеши, хеши по хешам, индексы по хешам и т.д. - это на долгое время будет твой кошмар, который ты должен будешь представлять у себя в голове. Работа с файлами напрямую не имеет смысла, если ты не планируешь создавать высоконагруженное приложение с большими объемами данных. В этом случае у тебя проработка архитектуры хранения данных займет на порядок больше времени, чем проработка архитектуры базы. Предварительный поиск по одному символу, по двум, трем, ссылка на файлы, которые содержат следующую часть, по которой уже идет поиск. Не забудь блокировки файлов, обработку ошибок доступа, обработку оборванных транзакций, уникальность значений, индексов или ключей и т.д. Отсутствие удобных select-ов с join-ами и блэкджеком потребует от тебя проработки возможных видов запросов, чтобы сам вид хранения данных оптимизировать под кастрированные возможности. А из запросов будут только аналоги простейших "SELECT xxx FROM file_yyy WHERE Id=zzz", "UPDATE file_xxx SET yyy WHERE Id=zzz", "INSERT INTO file_xxx yyy=zzz", "DELETE xxx FROM file_yyy WHERE Id=zzz". Этими 4-мя операциями тебе придется обходиться.

Сейчас есть уже готовые "велосипеды" noSQL, но это не "путь джедая". Типовой сайтик, с десятком или сотней уников в час не стоит такого геморроя.
Ответ написан
Комментировать
nepster-web
@nepster-web
База данных это теже файлы, только сверху стоит сервер который красиво и оптимизировано разруливает все запросы. Быстрее будет из базы, а еще быстрее из оперативки.
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Вчера мне подсказал один господин очень интересное решение для этого непростого выбора

Почти наверняка вы выбираете - где лучше хранить данные и чтобы получить удобное обслуживание системы (без длинных SQL) и быстрый поиск результатов (который как раз лучше в SQL, ведь в случае с файлом придется всю "базу" в оперативку лить, а значит постоянно докупать планочки и пинать админов - дескать поставьте побольше, а то чето тормозит), второе опять же - массивы длинной в пару километров долго читаются и парсятся редактором, то есть что-то изменить "открыв файл" - будет трудно - придется это делать через API, а значит проблемы или гениальное АПИ.

Я пока остаюсь на реляционке, хотя гении типа Яндекса и Гугла давно делают все в файлах/nosql и наверняка есть ответ почему вида "если у тебя миллиард записей, сервак может тупо лечь".

Есть такие штуки как поисковые движки. Ты в них данные закидываешь в виде массивов своих, а они дальше сами распределяют их в своей базе. Ты пишешь запрос и они под запрос сами выстраивают и кешируют ответы.

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

В ближайшее время попробую такую комбинацию
Ответ написан
@R939
Было бы смешно, если бы не было так грустно!
ОТСТУПЛЕНИЕ
Столько умников развелось, что прямой ответ уже не получить.
Задаёшь один, простой вопрос, а в ответ - 10 уточняющих и 5 абзацев с отступлениями!
НАРОД! Не можете ответить, не надо марать интернет и умничать!!!
Есть только ДА и НЕТ, остальное словоблудие и не знание ответа.
То есть, сравнение или мнение, но не демагогия и размышления о сферических конях в абсолютном вакууме.
ПО СУЩЕСТВУ.
Если короткие записи и их не много - в файл,
НО если сложные, структурированные, к которым нужен будет быстрый доступ с фильтрами и условиями - ДБ.
(НО ПРИ ВСЕХ РАВНЫХ). То есть, база на том же винте и в той же системе.
Ответ написан
Комментировать
Из файлов. БД теже файлы + интерфейс через который ты тянешь данные.
Но по факту все несколько сложнее. Если оперативы на твоем серваке мало - файлы будут вытеснятся из нее и база может оказаться быстрее.
Еще многое зависит от того сколько вообще файлов на каждом хите у тебя подключаются и как часто подключаются именно эти. Если всякий раз - они будут в оперативе сидеть достаточно надежно. Если от случая к случаю - не факт.
И даже размер файлов будет влиять. Если в каждом по 20 байт - я бы сунул в базу. Если они большие - разумнее оставить файлами, но это уже с точки зрения удобства. Так же подумай как будет удобнее их редактировать когад надо будет это делать.
Ответ написан
Комментировать
compilator
@compilator
Senior Data Engineer
Что за файлы, начнем с этого ?
Текст ?
Ответ написан
Комментировать
Что быстрее 10 запросов к базе на HDD или 1 запрос к файлам на SSD?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы