#database #file
#База данных #файл
Вопрос:
Рассмотрим, что я изменяю способ хранения файлов в системе, где каждое имя файла фактически будет именем таблицы в базе данных, а каждая строка в файле фактически будет строками этой таблицы. Увеличит ли это общую скорость системы? было бы целесообразно? каковы компромиссы?
Чтобы еще больше прояснить различие между этим и обычным использованием базы данных, рассматривайте файлы не просто как текстовые файлы, но также как аудио, видео, двоичные файлы и т.д. где они хранятся способом, упомянутым в предыдущем абзаце.
Непосредственные преимущества, которые я вижу из этого, заключаются в том, что я могу читать / записывать любую строку из / в файл без необходимости многократного чтения / записи предыдущих строк до достижения нужной строки. Другим преимуществом было бы одновременное чтение / запись файлов.
Пожалуйста, не путайте это с файловой системой базы данных, это файловая реализация
Комментарии:
1. в чем здесь вопрос? «Увеличит ли это общую скорость системы?» — быстрее чего?
2. Просто изменил это, чтобы сделать более понятным
3. Какими будут «строки» двоичного файла?
4. это может быть любое количество вещей, от простых текстовых файлов до реальных скомпилированных программ
5. Я не рассматривал реализацию того, как хранятся двоичные файлы, но я уверен, что смогу извлечь оттуда что-нибудь, чтобы узнать, как реализовать двоичные строки
Ответ №1:
Чтобы добавить к вашему преимуществу чтения записи по местоположению, дополнительным преимуществом являются.
Плюсы
Индексирование
Индексирование текста с помощью полнотекстовой индексации, которая может дать преимущества при поиске. Конечно, размер базы данных, вероятно, будет больше обычных размеров файлов. Но у вас есть преимущество с точки зрения производительности, потому что в системе базы данных будет открыт только один дескриптор файла, и он будет выполнять кэширование, повысит производительность и вызовет меньшую фрагментацию.
Блокировка / производительность
Открытие / закрытие нескольких файлов приведет к небольшим накладным расходам с точки зрения производительности, поскольку каждое открытие / закрытие требует проверки контроля доступа и блокировки.
Репликация
Преимущества репликации в том, что если вы поместите их в mysql, репликацию mysql легко настроить, и вы сможете легко сохранять несколько резервных копий.
Обслуживание
Перенос, обслуживание и запросы к базе данных будут намного проще, чем с точки зрения файлов.
Минусы
Доступ к файловому браузеру
Вы не можете получить доступ к файлам через explorer или обычный API файловой системы, вам понадобится какой-то access api, возможно, API на основе REST или какой-то viewer, который может читать базу данных.
Вы можете ознакомиться с моим блогом о более подробном анализе.
Комментарии:
1. Доступ к файловому браузеру: я предполагаю, что это зависит от конкретного приложения, поэтому приложение должно знать, как читать из него, если я предоставляю API (видеоплеер, текстовый редактор и т.д.)
2. Да, фактически у нас также есть 600 ГБ файлов, и мы храним их в базе данных, становится проще настраивать репликацию, передавать, запрашивать и обслуживать, для небольшого количества файлов база данных обходится дорого, но для огромного количества файлов она работает хорошо.
3. Пожалуйста, проверьте запись в моем блоге, в последней строке отредактированного ответа вы найдете более подробную информацию.
4. Просто прочитайте запись, в связи с тем, что вы сделали, я пытаюсь сделать еще 2 вещи: 1) разбить большой двоичный объект еще больше на отдельные строки. 2) сделать эти двоичные объекты понятными, чтобы их можно было читать самостоятельно
Ответ №2:
Возможно, некоторые преимущества в скорости присутствуют, но есть много проблем, из-за которых минусы перевешивают плюсы.
- Нет простого способа поддерживать транзакции
- Нет простого способа поддерживать типизацию полей (подумайте о файле с объектами BLOB в нем)
- Ограничение взаимосвязи
- Нет тривиальной поддержки кэша, доступ к оперативной памяти осуществляется быстрее, чем к диску
- Нет простого способа поддерживать что-то вроде «ALTER TABLE»
Я предполагаю, что если вы пишете что-то, что поддерживает все такого рода проблемы, вы написали движок sql…