Файл читается быстрее, чем чтение данных из базы данных? - PullRequest
3 голосов
/ 18 ноября 2010

Что дороже с точки зрения ресурсов и эффективности, операции чтения / записи файла или операции чтения / записи базы данных?

Я использую MongoDB с Python. Я не выполняю около 100 тыс. Запросов в дБ / файл в минуту. Кроме того, в базе данных / файле содержится около 15000 документов.

Что будет быстрее? заранее спасибо.

Ответы [ 5 ]

5 голосов
/ 18 ноября 2010

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

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

в случае интенсивного случайного чтения - я пойду с опцией базы данных.

3 голосов
/ 18 ноября 2010

Попробуйте и скажите нам ответ.

3 голосов
/ 18 ноября 2010

Слишком много факторов, чтобы предложить конкретный ответ, но вот список для рассмотрения:

  1. Пропускная способность диска
  2. Задержка диска
  3. Кэш диска
  4. Пропускная способность сети
  5. Размер кластера MongoDB
  6. Объем активности клиента MongoDB (диск имеет только одного "клиента", если ваш компьютер не занят другими рабочими нагрузками)
1 голос
/ 13 марта 2018

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

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

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

0 голосов
/ 18 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...