база данных против плоских файлов - PullRequest
72 голосов
/ 01 марта 2010

Компания, в которой я работаю, пытается переключить продукт, использующий формат плоских файлов, в формат базы данных. Мы обрабатываем довольно большие файлы данных (например, 25 ГБ / файл), и они очень быстро обновляются. Нам нужно выполнять запросы, которые произвольно обращаются к данным, а также непрерывным образом. Я пытаюсь убедить их в преимуществах использования базы данных, но некоторые из моих коллег, похоже, не хотят этого делать. Поэтому мне было интересно, можете ли вы, ребята, помочь мне с некоторыми причинами или ссылками на сообщения о том, почему мы должны использовать базы данных, или хотя бы уточнить, почему плоские файлы лучше (если они есть).

Ответы [ 10 ]

87 голосов
/ 01 марта 2010
  1. Базы данных могут обрабатывать запросы задачи, так что вам не нужно ходить поверх файлов вручную. Базы данных могут обрабатывать очень сложные запросы.
  2. Базы данных могут обрабатывать задачи индексирования, так что если такие задачи, как получить запись с идентификатором = х может быть ОЧЕНЬ быстро
  3. Базы данных могут обрабатывать многопроцессорный / многопоточный доступ.
  4. Базы данных могут обрабатывать доступ из сеть
  5. Базы данных могут следить за данными Целостность
  6. Базы данных могут легко обновлять данные (см. 1))
  7. Базы данных надежны
  8. Базы данных могут обрабатывать транзакции и одновременный доступ
  9. Базы данных + ORM позволяют вам манипулировать данные в очень удобной для программистов форме.
39 голосов
/ 01 марта 2010

Это ответ, который я уже дал некоторое время назад:

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

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

Если вам нужно много дополнений (ВСТАВКИ?) И последовательный / мало доступа немного / нет параллелизма, файлы путь.

С другой стороны, когда ваш требования к параллелизму, непоследовательное чтение / запись, атомарность, атомные разрешения, ваш данные носят реляционный характер и т. д., вам будет лучше с реляционная или ОО база данных.

Есть много, что может быть выполнено с SQLite3 , который очень легкий (до 300 КБ), КИСЛОТА совместимый, написанный на C / C ++, и очень вездесущий (если это еще не входит в ваш язык программирования Например, Python, есть, конечно, один). Это может быть полезно даже для файлов размером до 140 терабайт или 128 тибибайт ( ссылка на размер базы данных ), возможно больше.

Если ваши требования куда больше, не было бы даже обсуждения, перейти на полноценную RDBMS.

Как вы говорите в комментарии, что "система" - это просто набор скриптов, вам следует взглянуть на pgbash .

7 голосов
/ 01 марта 2010

Не собирай, если можешь купить.

Я недавно слышал эту цитату, и она действительно кажется подходящей в качестве ориентира. Задайте себе вопрос ... Сколько времени было потрачено на работу с частью обработки вашего приложения? Я подозреваю, что на оптимизацию кода было потрачено немало времени. Если бы вы все время использовали реляционную базу данных, вы бы потратили значительно меньше времени на обработку этой части вашего приложения. У вас было бы больше времени для настоящего «делового» аспекта вашего приложения.

5 голосов
/ 01 марта 2010

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

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

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

С ними гораздо проще работать, как только они будут настроены.

3 голосов
/ 01 марта 2010

А как насчет нереляционной (NoSQL) базы данных, такой как Amazon SimpleDB, Tokio Cabinet и т. Д.? Я слышал, что Google, Facebook, LinkedIn используют их для хранения своих огромных наборов данных.

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

3 голосов
/ 01 марта 2010

Базы данных полностью.

Однако, если вам все еще нужно хранить файлы, у вас нет возможности использовать новую СУБД (например, Oracle, SQLServer и т. Д.), Чем изучать XML.

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

Я настоятельно рекомендую БД, но если вы не можете пойти по этому пути, XML - это нормально.

2 голосов
/ 08 апреля 2013

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

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

2 голосов
/ 01 марта 2010

Какие типы файлов не упоминаются. Если это медиа-файлы, продолжайте с плоскими файлами. Возможно, вам просто нужна БД для тегов и какой-то способ связать «внешние BLOB» с записями в БД. Но если вам нужен полнотекстовый поиск, другого пути нет, кроме как перейти на полную БД.

Еще одна вещь, ваша файловая система может обеспечить потолок в отношении количества физических файлов.

2 голосов
/ 01 марта 2010

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

1 голос
/ 25 декабря 2017

Разница между базой данных и простыми файлами приведена ниже:

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

  • Система базы данных обеспечивает согласованность данных, тогда как плоский файл не может обеспечить согласованность данных.

  • База данных более безопасна по сравнению с плоскими файлами.
  • База данных поддерживает DML и DDL, тогда как простые файлы не могут их поддерживать.

  • Меньше избыточности данных в базе данных, тогда как больше избыточности данных в плоских файлах.

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