Если у меня есть выбор, следует ли сохранять содержимое веб-страницы в файловой системе или в MySQL? - PullRequest
1 голос
/ 12 декабря 2010

Я нахожусь на стадии планирования написания CMS для моей компании. Мне приходится выбирать между сохранением содержимого страницы в базе данных или в папках в файловой системе. Я узнал, что PHP прекрасно выполняет чтение и запись в файловые системы, фактически лучше, чем выполнение SQL-запросов. Но когда дело доходит до сохранения страниц и их данных в файловой системе, в этом будет гораздо больше, чем просто чтение и запись. Поскольку страницы будут отрисовываться с использованием класса PHP, данные для каждой страницы будут просто данными, а не HTML. Поэтому парсер для файлов должен быть написан. Также я сомневаюсь, что все данные со страницы будут сохранены в одном файле, скорее всего, они будут сохранены в одном каталоге с полями содержимого и данными в отдельных файлах.

Все это будет сделано намного проще с MySQL, поэтому я хочу спросить вас, эксперты:

Перевесит ли все лишнее с сохранением файловой системы преимущество в скорости и ресурсах перед MySQL?

Спасибо за ваше время.

Ответы [ 7 ]

1 голос
/ 12 декабря 2010

на что следует обратить внимание

  • условие гонки при записи в файл, если два пользователя редактируют один и тот же фрагмент содержимого
  • , если файл распределяется по нескольким серверам, если рост CMS, задержка репликации вызовет данныепроблема целостности
  • производительность поиска, grep для файлов в нескольких каталогах будет очень медленным
  • слишком много файлов в одном каталоге приведет к снижению производительности сервера, особенно в Windows
1 голос
/ 12 декабря 2010

Перейти на MySQL.Я бы сказал, что единственный раз, когда вы должны подумать об использовании файловой системы, это когда вы храните файлы (BLOBS) размером в несколько мегабайт, базы данных (по крайней мере, те, которые вы обычно используете на php-сайте), как правило, менее производительны при хранении такого рода.данных.В остальном я бы сказал: всегда используйте реляционную базу данных.(Предполагая, что вы имеете дело с данными, у данных есть, конечно, отношения, если это случайные данные, использование реляционной базы данных не принесет особой пользы; -)

Добавление: если вы определяете свои собственныефайловая структура, и даже ваш собственный способ перекрестной ссылки на файлы, вы уже начали создавать «базу данных» сами по себе, что само по себе неплохо - это может быть очень весело!- но вы, вероятно, не получите тех преимуществ в производительности, которые ищете, если ваша ситуация радикально не отличается от других 80% «стандартных» веб-сайтов в Интернете (пара страниц с текстом и изображениями на них).(Если вы создаете google / youtube / flickr / facebook ... у вас другая ситуация, и разработка собственного уникального решения для хранения данных начинает иметь смысл)

0 голосов
/ 13 декабря 2010

Нет, оно того не стоит.

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

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

0 голосов
/ 12 декабря 2010

Когда дело доходит до незначительных изменений содержимого сайта (например, исправление опечатки или обновление внешних ссылок), я считаю, что гораздо проще подключиться к серверу с помощью SSH и использовать различные инструменты (текстовые редакторы, grep и т. Д.) Для файловвместо того, чтобы использовать интерфейс CMS для обновления каждого файла вручную (такой интерфейс есть в нашей CMS).

Тем не менее, есть несколько вопросов для анализа и ответа, упомянутых выше - планируете ли вы масштабируемость, одновременное изменение данных и т. Д.

0 голосов
/ 12 декабря 2010

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

Кроме того, у вас есть такие инструменты, как phpMyAdmin для удобного поиска или обработки ваших данных по сравнению с texteditor.

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

0 голосов
/ 12 декабря 2010

Хранение данных в файловой системе может быть быстрее для больших двоичных объектов, к которым всегда обращаются как к одной части информации.При реализации CMS вам обычно приходится иметь дело не только с такими BLOB-объектами, но также со структурированной информацией, которая имеет внутренние ссылки (например, поля содержимого, принадлежащие определенной странице, которая имеет ссылки на другие страницы ...).Базы данных SQL предоставляют простой способ доступа к структурированной информации, а файлы в вашей файловой системе - нет (кроме, конечно, простых иерархических структур, которые могут быть представлены в виде папок).

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

Короче говоря, используйте MySQL

0 голосов
/ 12 декабря 2010

Предполагая, что у вас здесь среда с одним трафиком с низким трафиком…

Если вы ожидаете когда-либо управлять этими записями вне CMS, я считаю, что это много, много *На 1004 * проще сделать это с существующими инструментами, чем с инструментами доступа к базе данных.

Например, огромное значение имеет возможность использовать awk, grep, sed, sort, uniq и т. Д. Для текстовых данных.Проксирование через базу данных делает это трудным, но не невозможным.

Конечно, это просто мнение, основанное на опыте.

S

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