Что лучше / быстрее? MySql или FileSystem?


9

Давайте представим веб-сайт, который представляет собой каталог людей. Для каждого человека могут быть фото профиля и биография.

Я признаю, что мои SQL- запросы могли бы быть лучше, но в целом, что было бы быстрее и потребляло бы меньше вычислительной мощности.

Чтобы проверить, существует ли файл, а затем откройте его или

проверьте MySql, чтобы увидеть, если био существует и отобразить его.

Я уверен, что в приведенном выше случае файловая система будет курить базу данных MySQL.

Что если я сделаю базу данных доступным только для чтения текстовым файлом с разделителями?

Что быстрее в этом случае?

Есть ли определенный момент, когда, если в текстовом файле слишком много записей, лучше использовать MySql?


4
Допустим, в вашем каталоге 100 тысяч человек, и вам нужны биографии тех, кто родился в 1978 году. Как вы думаете, откуда придет дым? Открытие 100К файлов в файловой системе или один запрос в SQL?
ypercubeᵀᴹ

1
@ypercube - я согласен с вами, но в случае ОС Linux существует ограничение на количество открытых файлов одновременно с каждым процессором.
Сатиш Пандей

Ответы:


17

Файловая система полезна, если вы ищете определенный файл, поскольку операционные системы поддерживают своего рода индекс. Однако содержимое текстового файла не будет проиндексировано, что является одним из основных преимуществ базы данных. Другое понимание реляционной модели, так что данные не нужно повторять снова и снова. Другое понимание типов. Если у вас есть текстовый файл, вам нужно проанализировать числа, даты и т. Д.

Итак, файловая система может работать для вас в некоторых случаях, но, конечно, не во всех.


+1, файловые системы также не подходят для частичного поиска по именам файлов или другим атрибутам. Когда количество файлов настолько велико, у вас может возникнуть проблема с поиском файлов таким способом. Сказав, что обычно используется файловая система для данных, которые не являются транзакционными по своей природе и к которым контент всегда доступен как одна единица, например, вложения документов и файлы изображений.
NoChance

12

Это действительно зависит от того, что вы делаете. В общем, скорость, с которой вы можете открыть файл для чтения, будет лучше, чем скорость, с которой вы можете установить сетевое соединение. Поэтому для очень простых операций файловая система определенно быстрее. Файловые системы, вероятно, также превзойдут СУБД в отношении сырой пропускной способности при чтении, поскольку затраты на нее меньше. Фактически, если вы подумаете об этом, база данных никогда не будет быстрее, чем файловая система, в которой она находится, с точки зрения сырой пропускной способности.

Для очень сложных операций файловая система, вероятно, будет очень медленной. Например:

Прочитайте 10 строк из этого файла с 1 миллиардом строк и затем найдите соответствующие строки в этом другом файле. Мне жаль тебя, если ты должен сделать это. Хороший сервер баз данных, тем не менее, имеет стратегии сделать это быстро и хорошо, так что вы не изобретаете велосипед.

Кроме того, вам действительно нужно выяснить, что вы делаете. Какие данные вы храните? Как вы собираетесь преобразовать это? Если это файлы изображений размером 100 тыс., Ваше решение будет выглядеть совсем иначе, чем если бы это был каталог для 100 тыс. Человек. (Возможно, LDAP? Или база данных SQL? Зависит от того, что вы делаете, возможно.) Ключевым моментом здесь является выбор инструментов, которые соответствуют тому, что вы делаете, и которые дают вам возможность добавить больше применений, а не то, что кажется самым быстрым для некоторых довольно абстрактный вариант использования. Базы данных - замечательные инструменты, но вы не можете получить хороший ответ на такой вопрос.

Наконец, преждевременная оптимизация - корень всего зла. Выберите полезные инструменты сейчас, а остальные выясните позже.


Конечно, если у вас есть два виртуальных экземпляра, обменивающихся данными через виртуальный сетевой адаптер, или БД, работающая на том же экземпляре, что и сервер приложений, если у вас достаточно разумного объема памяти, вы можете убедиться, что чтение из базы данных происходит быстрее, чем для чтения fs чаще всего. времени, потому что, если вы полагаетесь на файловую систему, вы находитесь в зависимости от алгоритма кэширования / замены страниц драйвера fs, в то время как база данных может резервировать сегменты памяти таким образом, чтобы они никогда не были выгружены, в первую очередь требуя задержки вашего приложения , Предполагая, что у вас включен обмен.
Парфянский выстрел

Твоя последняя строчка поднимает мне настроение ... @Chris Travers
Бисвадип Саркар

5

Файловая система может быть быстрее, но я сомневаюсь в этом. Однако по мере увеличения размера данных вам, вероятно, придется реструктурировать файловую систему для поддержания производительности. Помимо очевидной способности индексировать по нескольким атрибутам, базы данных, как правило, лучше масштабируются.

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

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


4
Ну, это не проблема. Давайте просто создадим другой файл, который перечисляет значения и ищет смещения. Фактически мы могли бы оптимизировать это для поиска с помощью btrees. Тогда мы знаем, где прочитать файл! Далее, я полагаю, мы должны добавить декларативный язык запросов в нашу маленькую программу, способную объединять результаты между различными файлами с разделителями, а затем, возможно, соответствие ACID .... Со временем, ну зачем вообще использовать СУБД? ;-)
Крис Траверс

@ChrisTravers Был там, сделал это, и я намного счастливее, используя базу данных.
BillThor

5
Идея была такой: «Тем, кто не учится в UNIX, суждено плохо ее изобретать».
Крис Треверс

1

Я всегда люблю приходить на эти форумы и читать все тяжелые сообщения гуру баз данных о том, что файловая система не может сделать это так же быстро, как база данных. Напротив, правильно выстроенное дерево, хорошо спроектированные хеш-таблицы и сохранение их в виде объекта в файл будут давать те же скорости, что и база данных, и из моих тестов. Правильно спроектированная хеш-таблица и дерево каталогов будут побеждать каждый раз. Намного меньше накладных расходов. В последнее время я отошел от программирования на основе баз данных и больше от дерева файлов для простоты и переносимости программ. Отсутствие БД означает простое резервное копирование, просто заархивируйте дерево и работайте. Это очень приятно и рекомендуется программировать таким образом для бывших клиентов с небольшими приложениями. Посмотрите на большую картинку, есть ли у меня время, чтобы создать свой собственный или просто использовать то, что уже есть, например, БД. Мне лично нравится сохранять свои объекты в файл и использовать их позже, просто следите за размером ваших таблиц и изучите использование RandomAccessFile, чтобы иметь возможность быстро найти его в виде базы данных и разбить его на хеш-объекты , Наслаждаться. Помните, что когда-либо данные, которые вы храните в файле, будут использовать вдвое больше памяти, в зависимости от вашего кода. Сама хеш-таблица и, как правило, где вы ее используете для просмотра.


3
Единственный подходящий ответ на этот вопрос, о котором я могу подумать, - это .
Марк Стори-Смит

3
@ MarkStorey-Smith, это интересная ссылка, но самонадеянно ли подразумевать, что это решение где-то в спектре Даннинг-Крюгера? :)
Дэвид Манн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.