Zanuda
Главная   Планы   Разное  
Главная »Разное »Файлы или база данных?

Файлы или база данных?

На днях, блуждая по сети, натолкнулся на очередную полемическую заметку. Вроде бы и грамотно написана, но пример для рассмотрения выбран более чем тенденциозно, а смысл сводится к пошлой реплике «и как же ж вам не стыдно делать CMS с файлами, когда все прогрессивное человечество давно уже использует только базы данных!». Даже захотелось откликнуться, но заметка в блоге, датирована прошедшим сентябрем... махнул рукой и не стал пополнять контентом чужой сайт. Лучше свой пополню.

Я не фанатик и не веду «священных войн». Ибо мало что на свете так глупо, как доказывать, что C мощнее Pascal, Opera быстрее FireFox, а из Windows и Linux лучшая система – FreeBSD. На вопрос «что лучше?» возможен только встречный вопрос «а для каких целей?». Любой другой ответ уместен крайне редко, когда вопрос поставлен более конкретно. Но здесь случай почти анекдотический.

Автор заметки пишет в блоге, построенном на движке небезызвестного Lasto. Для тех, кто не знает: этот движок, как и целое семейство движков того же разработчика, не использует базу данных. Автор пользуется для публикации своей статьи инструментом, который сам же и отрицает. Согласитесь, это уже способно вызвать улыбку. Но это не все.

Для доказательства своей правоты автор выбирает не что иное, как модуль статистики – пожалуй, самый непростой по структуре данных. То есть, то узкое место, где база данных была бы заведомо удобнее. Далее следуют рассуждения – во многом справедливые – о нерациональности файлов в этом конкретном случае. И о рациональности использования в этом же случае базы данных. Здесь уже заметно легкое передергивание, делающее нашу улыбку саркастической. Приведенный пример структуры и формата хранимых данных явно не слишком рационален. Тем не менее, структуру можно изменить так, что доступ облегчится. Но автор проходит мимо этой возможности и упирает на то, что индекс базы данных перерыть по частям (половинными интервалами) обойдется дешевле, чем считывать файл в массив и искать в нем последовательным перебором.

Далее идут рассуждения о том, что это ж целый файл надо считать, а вот в базе данных... Вот тут уже моя улыбка сменилась гомерическим хохотом. А база данных по-вашему – не файлы, а что-то иное? А юникс-подобная система позволит какой-то метод доступа к этому файлу, кроме последовательного чтения? Това-арищи, это же несерьезно... Либо файл будет считан весь и разобран как массив, либо будет «подчитываться» кусками, на что уйдет куда больше времени. Да, индекс будет перебираться быстрым алгоритмом, но позвольте заметить, что не менее быстрый алгоритм ищет нужный индекс в ассоциативном массиве. И что это тоже одна-единственная базовая функция php, и что она тоже вызывается из давно скомпилированной билиотеки...

Дорогие мои «крестоносцы», сколько можно размахивать картонными мечами? Делом бы лучше занялись. И осознали тот простой факт, что все хорошо на своем месте. При простой (и рационально построенной) структуре, каковая имеет место в этом движке, база данных будет скромно курить в отведенном месте. Она нужна... нет, больше того, она необходима там, где нужно связывать разные и сложные структуры данных. Именно там ее «тормоза» становятся незаметны – в сравнении с самописным, на интерпретируемом языке, алгоритмом, который будет проделывать то же с массивами, считанными из файлов. А уж память ваша любимая БД жрать горазда почище любого другого хранилища. Да, это часто память не вашего веб-сервера, а отдельного сервера БД. Который, в свою очередь, не менее часто работает с большой толпой веб-серверов, отчего тормозит еще крепче...

Не могу сказать, что делать мне нечего, но я все-таки озабочусь доказательством своих слов. Сделаю то, чего никогда не делают «крестоносцы» – демонстрационный сайтик, полностью аналогичный этому по структуре данных, но с хранением данных в БД. Чтобы можно было наглядно продемонстрировать «теоретикам», что же быстрее работает на самом деле.

Файлы или база данных?
Стремительные слонопотамы
Доверие роботов