orleanz: (main)
orleanz ([personal profile] orleanz) wrote2016-02-25 09:54 am

Вопрос программистам: что быстрее - файловая система или база данных?

Уточняю вопрос (иначе он был бы бессмысленным)

Допустим, у нас есть 1 (одна) таблица с 2 (двумя) колонками

В первой колонке - большой интегер, Юникс тайм, отсортированный по возрастанию, во второй колонке - строки (собственно пейлоуд, данные)

Я хочу максимально быстро выдавать те строки таблицы, которые удолетворяют некому условию по первой колонке, например, все строки соответствующие одному дню

Это элементарно делается с использования условного Постгреса, ок.

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

Что будет в результате быстрее, как думаете?

Вопрос апдейта данных и сложных запросов не стоит, речь про узкоспециализированную задачу, описанную выше.

Тут ведь еще какой момент есть - если речь идет про веб, то выдача данных может идти НАПРЯМУЮ через стоящий впереди реверс-прокси Nginx, через статическую директорию. То есть просто по прямому УРЛ обращаешься к файлу с соответствующим именем, скажем, http://mysite.com/static/db/2010.10.31.txt, и усё, Энджинэкс выдаст данные даже не потревожив Ноду (аппликейшен сервер). А если делать через базу данных, то аппликейшен сервер будет по всякому задействован...

[identity profile] orleanz.livejournal.com 2016-02-25 11:19 am (UTC)(link)
а БД сама типа не открывает файл, а волшебно знает его содержимое сама по себе?
Edited 2016-02-25 11:20 (UTC)

[identity profile] Сергей Монахов (from livejournal.com) 2016-02-25 12:44 pm (UTC)(link)
А он у нее уже открыт, вопрос позиционирования курсора в нем). А даже если и открывать - потом все закешируется с некой вероятностью.
Я в свое время одно приложение (PHP) переводил с файлов на БД - разница по скорости в десятки раз.

[identity profile] imfromjasenevo.livejournal.com 2016-02-25 07:58 pm (UTC)(link)
для php возможно это так, но если что-то более вменяемое, то очень сомнительный результат БД пользуется файловой системой так или иначе, т.е. сразу писать в файл быстрей.

[identity profile] p-a-s-h-a.livejournal.com 2016-02-25 01:05 pm (UTC)(link)
БД строит в памяти хитрейшим образом организованные кэши. Чем навороченнее БД тем БД-шные кэши хитрее. Также достаточно навороченная БД организует запись в файлы (своего, внутреннего формата) так, чтобы не мешала фрагментация файлов, или чтобы фрагментации файлов вообще не было