Подскажите что быстрее загрузить в массиф 10 чисел которые записатны последовательно через разделитель в файле на диске, или из базы мускуля из 10 записей идущих подряд, если учитывать что количество файлов в каталоге 10 000 или столько же по 10 записей в таблице... Может еще на до чтото учесть.... платформа юних
всё зависит от конкретной ситуации тогда БД если бы один файл с 10 записями в виде сериализованного массива был, тогда бы - файл... но не потому что быстрее, а потому что ради 10 статичных записей нет смысла насиловать БД
Проще сделать два тестовых варианта и замерить скорость. БД тоже хранит данные в файле. К тому же, разве mysql_fetch_array будет работать быстрее explode? Особенно хорошая скорость считывания файла при использовании функции file_get_contents.
А какое значение имеет количество файлов в каталоге? Вы их все будете считывать?! Хотя в любом случае... я бы базу выбрал - с ней удобнее работать и данные более "наглядны". Разбираться с 10000 файлов мне было бы просто как-то не по себе
Я думаю что ext2 ext3 могут оказывать неплохой "упор" при большом количестве файлов... Я просто не могу прикинуть сколько библиотек Вы загрузите в память когда работаете с БД или прямо с диском, причем хостинг провайдеры тоже жадные на память некоторые категорически откидывают использование больше 4 Мб....
К сожалению, с ФС знаком плохо. На самом деле не знаком вовсе. Просто полагал всегда, что именно количество файлов не может влиять на скорость чтения одного конкретного файла, который к тому же состоит из 10 чисел. Ну если уж говорить о хостинг-провайдерах. Тем более жадных, то вряд ли они дадут Вам возможность выгрузить все эти библиотеки из памяти, да и вообще как-то настраивать php. Обычно, кстати, у вас есть лимит ресурсов от всех "мощностей машины". Я сейчас обычно использую didicated серверы, но есть и один хостинг Мажордомо, где я могу использовать до 15% ресурсов машины, которая далеко не с 16 Мб оперативки. Кроме того, пока что я работал (ну по-серьезному, так сказать) с файлам только один раз. И то по глупости чужой. Файл тогда быстро вырос до 4-5 мб и загружаться мог по несколько раз в секунду. В итоге памяти в принципе не хватало никакой Разумеется, я это все переделал для работы с базой, как и надо было изначально. упд. Вижу смысл хранить в файлах только какие-либо статичные данные, небольшие по объему.
скорее всего единственная выгода от хранения в файлах это - не использование сервера субд + меньше занимает дискового пространства
Я как бы просто не в курсе - а в этих ФС нет индексации? Ведь в таком случае поиск нужного файла не будет занимать так много времени. kostyl Неужели у Вас такой хостер, который так жестоко ограничивает в ресурсах?! Или Вы это все из чисто теоретических рассуждений?
Вроде есть индексация, но во многих книгах описывается что "они демонстрируют низкую производительность при накоплении большого количества файлов в каталоге". Поиск все равно ведется с корня по дереву вниз, при этом если "поисковик" находит каталог с большим кол-вом файлов он просто начинает медленнее работать из-за количества индексов(ну это уже лично мое мнение)... нет, нет это чисто теоретически :roll:
Для файла: PHP: <?php $time_start = microtime(1); for($i=1000;$i>0;$i--){ $text=file_get_contents('test.txt'); $array=explode('|',$text); } $time_end = microtime(1); $time = $time_end - $time_start; /* Для наглядности */ echo "Затрачено ".substr($time,0,4)." секунд"; ?> test.txt: Код (Text): 1|2|3|4|5|6|7|8|9|10 Средний результат: 0.13 сек (NTFS) Для БД: PHP: <?php mysql_connect('localhost','root','pass'); mysql_select_db('test'); $time_start = microtime(1); for($i=1000;$i>0;$i--){ $result=mysql_query('SELECT * FROM `test`;'); while ($array[]=mysql_fetch_row($result)); } $time_end = microtime(1); $time = $time_end - $time_start; /* Для наглядности */ echo "Затрачено ".substr($time,0,4)." секунд"; ?> Таблица test: Код (Text): |text| ------ |1 | |2 | |3 | |4 | |5 | |6 | |7 | |8 | |9 | |10 | ------ Средний результат: 0.21 сек (MySQL 5.0.24) По-моему, весьма убедительно Время соеденения с БД даже не считаем, т.к. считаетм, что подклчаемся не только для этого запроса.
специально на виндовом попробовал. [sql]CREATE TABLE `test1` ( `id` int(1) NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ; INSERT INTO `test1` (`id`) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);[/sql] mysql шустрее