Stek

Рейтинг
315
Регистрация
23.05.2004
Как заключение хочу сказать что простому программисту который не собирается писать сайты миллионной посещаемости базы не дадут преимуществ

Даже сказать в ответ на такое заключение нечего.

бд - это не обязательно SQL-бд и если не SQL - это автоматически не означает, что обязательно на файлах.

Ну наверное в свете топика и начального уровня вопросах, можно понять о каких CMS и DB речь. Можно конечно и NoSQL в пример привести, но сомневаюсь, что ТС интересуется обработкой терабайтов информации в кластерах :)

Оно было расписано мной ранее.

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

Без БД, или без SQL-совместимой БД?

А так сложно понять, что понимается под бд а что нет ?

БД - SqLite, MySQL, Postgres, MSSQL, Oracle и подобное.

Файловая БД - хранение, получение, обработка данных осуществляется с использованием php функций fread, fopen и подобного набора. Тут же XML хранение данных.

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

Думаю через панель будет в любом случае быстрее, чем по фтп сотню сайтов с разных хостингов выкачивать :)

А вот вопрос о том является ли sqlite файловой так и остался открытым - мнения разные

А что не так ? Смущает, что без демона работает ? Думаю достаточно ознакомиться с сайтом, что бы понять что это.

"SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. "

Я строил проекты от 10 до 120 миллионов долларов, что в Украине что в России

Это включая стоимость земли и помещений, или только комплектация инфраструктуры ?

или брать готовое решение, в идеале sqlite или свой велосипед

sqlite - это и есть база данных, а не файловая реализация.

В общем, а вам не пофиг чего там делает класс базы данных? Не вручную же пересматривать каталоги

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

Файловые цмс - это пережиток прошлого, когда 5-10 лет назад доступ к mysql был дорогой, а некоторые хостеры еще и брали денюжку за каждый запрос в базу. Все надуманные преимущества в виде скорости, надежности, легкости бакапов - просто от неумения работать с базами.

"mysqldump -uUSER -pPASS DB_NAME > db.dump.sql" и у меня бакап базы.

"mysql -uUSER -pPASS DB_NAME < db.dump.sql" и я поднял базу из бакапа.

Это очень сложно ?

Файлы - это прослойка, в них удобно хранить кеш, различные счетчики, логи и подобное. Не более.

Вон awilum, вовсю защищает файловые движки, аж с целым списком преимуществ. А свой сайт держит на MySQL, парадокс :)

http://www.hotscripts.com/ - не совсем то, но вот примеров и исходников там действительно много :)

http://linkorcms.ru/ - mysql и flat file

>Страница сгенерирована за 1.05 сек. и 15 запросов к базе данных ( PHP: 12% БД: 88% )

>Желательно: MySQL любой версии, GD, MbString, Iconv.

Таки да, работает и без базы, но лучше всего с базой :)

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

мля откройте для себя хотя бы Gladius DB ее юзают популярные файловые CMS.

* performance slowdown with a huge number of records

* no storage gain for binary fields (for example, numbers)

* non-validating SQL parser (an SQL query that works with Gladius may not be syntactically correct)

* all strings are considered binary and should always be Unicode safe

* no specific collation or character set support

* cannot SELECT calculated or immediate values

* no specific date/time functions (as of Gladius DB v0.6.2)

Последний релиз 2 года назад, на форуме поддержки аж 3 сообщения. В списке багов ни одного исправленного за эти же 2 года.

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

Ок, скачиваем, запускаем пример, смотрим. Таблица - это файл где данные хранятся в виде сериализованного массива. После первой же тысячи записей, хостинг выпрет вас за превышение нагрузки на cpu .

А я давно изучил, поэтому и утверждаю подобное.

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

Ок, ладно, проехали :) Давайте дальше, по вашей ссылке берем первую же цмс "Simple PHP Blog v.0.7" , смотрим как она сохраняет данные:

		function write_file( $filename, $str ) {

if ( strtolower( strrchr( $filename, '.' ) ) == '.gz' && extension_loaded( 'zlib' ) ) {
$str = gzencode( $str, 9 );
}

fileio::make_dir(dirname($filename));

@umask(0);

$length = strlen($str);
$bytes_written = file_put_contents( $filename, $str );

if ( $length == $bytes_written ) {
@chmod($filename, 0777);
return $bytes_written;
} else {
return false;
}
}
function make_dir( $dir, $mode=0777 ) {

@umask(0);
if (is_dir($dir) || @mkdir($dir,$mode)) {
return true;
}
if (!fileio::make_dir(dirname($dir),$mode)) {
return false;
}
if (@mkdir($dir,$mode)) {
return true;
} else {
return false;
}
}

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

Ах, да, вот нашел в этой CMS функцию чтения контента :


$basedir = CONTENT_DIR;

// YEAR directories
$entry_array = array();
$dir = $basedir;
if ( @is_dir( $dir ) ) {
if ( $year_dir_handle = @opendir( $dir ) ) {
while ( ( $year_dir = readdir( $year_dir_handle ) ) !== false ) {
if ( is_dir( $dir . $year_dir ) ) {
if ( $year_dir != '.' && $year_dir != '..' && $year_dir != 'static' ) {

// MONTH directories

if ( $month_dir_handle = @opendir( $dir . $year_dir . '/' ) ) {
while ( ( $month_dir = readdir( $month_dir_handle ) ) !== false ) {
if ( is_dir( $dir . $year_dir . '/' . $month_dir ) ) {
if ( $month_dir != '.' && $month_dir != '..' ) {

// ENTRIES

if ( $entry_dir_handle = @opendir( $dir . $year_dir . '/' . $month_dir . '/' ) ) {
while ( ( $entry_filename = readdir( $entry_dir_handle ) ) !== false ) {
if ( is_file( $dir . $year_dir . '/' . $month_dir . '/' . $entry_filename ) ) {

$ext = strtolower( strrchr( $entry_filename, '.' ) );
if ( $ext == '.txt' || $ext == '.gz' ) {

// Store Blog Entry Information
$value = blog_entry_to_array($dir . $year_dir . '/' . $month_dir . '/' . $entry_filename);
array_push( $entry_array, implode( '|', array( $entry_filename, $year_dir, $month_dir, $value['SUBJECT'] ) ) );
}

}
}
}

// END of ENTRIES

}
}
}
}

// END of MONTH directories
}
}
}
}
}

и конечно же, что бы все это не загнуло файловую систему нафиг, решение сперто у индусов:


// To avoid server overload
sleep(1);
$output_str = '';
$entry_file_array = blog_entry_listing();
$results = 0;

Поистине CMS на файлах проще, быстрее и надежнее :)

Всего: 2766