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

Если бы у меня есть статическая база данных, состоящая из папок и файлов, доступ и управление были бы быстрее, чем базы данных типа SQL-сервера, полагая, что это будет использоваться в сценарии CGI?

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

50
задан Oleg 7 April 2018 в 12:06
поделиться

8 ответов

Я добавлю к этому, зависит толпа.

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

Некоторые вопросы, которые я бы спросил себя при создании выбора:

  1. Как я употребляю данные? Например, я просто буду читать с начала до конечных рядов в вошении заказа? Или я буду искать ряды, которые соответствуют нескольким критериям?

  2. Как часто я доступен к данным во время одного выполнения программы? Буду ли я пойти однажды, чтобы получить все книги с Салгером как автор или я пойду несколько раз, чтобы получить несколько разных авторов? Буду ли я пойти более одного раза для нескольких различных критериев?

  3. Как я буду добавлять данные? Могу ли я просто добавить ряд до конца, и это идеально подходит для моего поиска или ему нужно прибегать?

  4. Насколько логично будет выглядеть код в течение шести месяцев? Я подчеркиваю это, потому что я думаю, что это слишком часто забывает В проектировании вещей (не только код кода, этот хобби на самом деле из моих дней в качестве военно-морского механика проклятия механических инженеров). Через шесть месяцев, когда я должен поддерживать свой код (или вы выполнять после работы другой проект), какой способ хранения и получения данных принесет больше смысла. Если из плоских файлов в БД приводит к улучшению эффективности 1%, но добавляет неделю выяснения вещей, когда вы должны обновить код, которые вы действительно улучшили вещи.

58
ответ дан 7 November 2019 в 10:42
поделиться

Зависит от того, какова ваша информация и какие указываются ваши шаблоны доступа и масштабы. Два из самых больших преимуществ реляционных баз данных являются:

  1. кэширование. Если вы не очень умны, вы не можете написать кэш так же хорошо, как для оптимизатора DB Server

  2. .

Тем не менее, для определенных специализированных приложений, ни один из этих 2 преимуществ проявляется на самом деле, по сравнению с файлами + папкими хранилища данных - поэтому ответ - это громкое «зависит».

Что касается файлов / папок, трюки:

  • кэш-память Содержимое часто запрашиваемых файлов
  • имеют небольшие каталоги (файлы в глубоко вложенных небольших каталогах намного быстрее доступа, чем в более плоской структуре, из-за Время, необходимое для прочтения содержимого большого каталога).
  • Есть и другие, более передовые оптимизации (нарезание на дисках, размещение на разных местах в диске или разных разделах и т. Д.) - Но если у вас есть необходимость этого уровня, вам лучше с базой данных в первом место.
20
ответ дан 7 November 2019 в 10:42
поделиться

, что и другие указали: это зависит!

Если вы На самом деле Необходимо выяснить, что будет больше исполнителей для ваших целей, вы можете создать некоторые примерные данные для хранения в каждом формате, а затем запускать некоторые ориентиры. Модуль BANDMARM.PM поставляется с Perl, и делает его довольно простым, чтобы сделать его по боковому сравнению с чем-то вроде этого:

use Benchmark qw(:all) ;

my $count = 1000;  # Some large-ish number of trials is recommended.

cmpthese($count, {
    'File System' => sub { ...your filesystem code... },
    'Database'    => sub { ...your database code... }
});

Вы можете набрать Perldoc Benchmark , чтобы получить более полную документацию.

5
ответ дан 7 November 2019 в 10:42
поделиться

Как сказал другие, это зависит : по размеру и характеру данных и операций, которые вы планируете запустить на нем.

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

, а также решение Berkley DB, вы также можете рассмотреть возможность использования SQLite . Это создает интерфейс SQL к базе данных, хранящейся в локальном файле. Вы можете получить доступ к нему с DBI и SQL, но нет сервера, конфигурации или сетевого протокола. Это может позволить более пропустить миграцию, если в будущем необходим сервер базы данных (пример: если вы решите иметь несколько интерфейсных серверов, но нужно поделиться штатом).

Не зная деталей, я бы предложил , используя решение SQLite / DBI, затем просмотр производительности . Это даст гибкость с достаточно простым началом и достойным производительностью.

1
ответ дан 7 November 2019 в 10:42
поделиться

Это зависит от профиля данных и от того, какую логику Вы будете использовать для доступа к ним. Если Вам просто нужно сохранить и получить именованные узлы, то база данных на базе файловой системы может быть быстрее и эффективнее. (Для этого вы также можете посмотреть БД Беркли.) Если вам нужно выполнять поиск по индексам, и особенно если вам нужно объединить различные наборы данных по ключам, то база данных SQL - это лучший вариант.

Я бы просто выбрал то решение, которое кажется наиболее естественным для вашего приложения.

1
ответ дан 7 November 2019 в 10:42
поделиться

Как общее правило, базы данных медленнее файлов.

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

Но «производительность» не является целью при выборе базы данных над файловым решением.

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

Итак:

  1. Вам нужно иметь дело с несколькими пользователями и одновременными обновлениями? (Ну, вы сказали, что это статично.)
  2. Вам нужна гибкость, чтобы легко запрашивать данные из различных углов?
  3. У вас есть несколько пользователей, и могут получить использование существующей модели безопасности ?

В основном вопрос больше, чем будет легче развиваться. Разница в производительности между ними не стоит тратить временное время.

19
ответ дан 7 November 2019 в 10:42
поделиться

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

Мой небольшой опыт работы с PostgreSQL. У меня была таблица с тремя миллионами строк, и я пошел обновить всего 8000 записей. Это заняло 8 секунд.

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

10
ответ дан 7 November 2019 в 10:42
поделиться

Для быстрого доступа к файлам доступа, в зависимости от того, что вы делаете, MMAP может быть очень удобным. Я только что писал об этом в эффективном блоге Perl как файлов Memory-map-map вместо того, чтобы промокать их .

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

1
ответ дан 7 November 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: