Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Быстродействие чтения данных
 
 автор: Владимир55   (26.10.2007 в 16:02)   письмо автору
 
 

Есть массив данных, состоящий вот из таких фрагментов:

$a[7720071026] =  "данные";
$b[7720071026] =  "данные";
$c[7720071026] =  "данные";
$d[7720071026] =  "данные";
$e[7720071026] =  "данные";


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

Можно сформировать один рнр-файл и разместить там все эти переменные, а потом этот файл подключать к скрипту. Но при одном вызове скрипта понадобится прочесть всего лишь один фрагмент, а "ворочить" придется полмиллиона записей!

А можно сделать 100.000 рнр-файлов, дав каждому из них имя индекса, и разместив в нем пять переменных. Например, файл 7720071026.рнр будет содержать:

$a =  "данные";
$b =  "данные";
$c =  "данные";
$d =  "данные";
$e =  "данные";


Тода посредством file_get_contents("7720071026.рнр") можно будет прочитать эти данные, и для этого придется обратиться лишь к короткому файлу.

Как мне кажется, во втором варианте быстродействие будет намного выше.
Единственное, что меня смущает, так это довольно большое количество файлов - 100.000. Не снижает ли быстродействие столь большое число файлов и не тянет ли это за собой какие-то иные проблемы?

   
 
 автор: Thrasher   (26.10.2007 в 16:14)   письмо автору
 
   для: Владимир55   (26.10.2007 в 16:02)
 

Для решения подобных задач существуют СУБД.

   
 
 автор: Владимир55   (26.10.2007 в 16:27)   письмо автору
 
   для: Thrasher   (26.10.2007 в 16:14)
 

СУБД здесь при чем?

Что, там информация хранится как-то иначе?
В СУБД точно такое же взаимодействие с винчестером, как и при чтении обычного файла, плюс обилие служебных записей, так что СУБД заведомо будет самым медленным решением.

   
 
 автор: Unkind   (26.10.2007 в 16:31)   письмо автору
 
   для: Владимир55   (26.10.2007 в 16:27)
 

[поправлено модератором]

   
 
 автор: Владимир55   (26.10.2007 в 16:40)   письмо автору
 
   для: Unkind   (26.10.2007 в 16:31)
 

Да пробовал, пробовал. Все помешались на этих базах! Одна из них с записями PowerCounter у меня открывается 18 минут!

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

   
 
 автор: Unkind   (26.10.2007 в 16:47)   письмо автору
 
   для: Владимир55   (26.10.2007 в 16:40)
 

[поправлено модератором]

   
 
 автор: Владимир55   (26.10.2007 в 16:59)   письмо автору
 
   для: Unkind   (26.10.2007 в 16:47)
 

PowerCounter версии 2.9, который я взял с этого сайта, через два месяца работы замедлился настолько, что для вывода таблицы Реферер требует 18 минут. Вероятно, можно заняться оптимизацией, или еще чем - не знаю, но лично я сделал проще: написал его статический аналог. И он открывается мгновенно. Да и что ему не открываться, если это эквивалентно открытию двух крохотных htm-файлов! И его быстродействие сохранится таким же и через сто лет, причем без всякой оптимизации.

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

   
 
 автор: Unkind   (26.10.2007 в 17:05)   письмо автору
 
   для: Владимир55   (26.10.2007 в 16:59)
 

Действительно, зачем тратить какое-то время на оптимизацию. Лучше до конца жизни позиться с сотнями тысяч файлов...

   
 
 автор: Владимир55   (26.10.2007 в 17:46)   письмо автору
 
   для: Unkind   (26.10.2007 в 17:05)
 

Unkind, а чего с ними возиться? Настроил, и пусть работает!

Первый (и единственный, если не последний) динамический сайт с БД я сделал на СМС Joomla. Я приводил на него ссылку на этом форме - он даже изначально, с небольшим количеством страниц открывался заметно медленней статического.

Поэтому следующий сайт я сделал статическим с использованием рнр. Это новостной автонаполняемый сайт, и сейчас в нем почти 4000 страниц. Это довольно много, ну и что? Лежат они все в отдельной папочке, прекрасно проиндексированы, нагрузка на хостинг ничтожная, а открываются мгновенно.

Что же в этом плохого?
Какие тут недостатки?

А мой основной сайт насчитывает 12000 страниц. Все статические htm файлы, управляемые написанной мною СМС. Для лучшей индексации поисковиками ВСЕ страницы периодически обновляются, ежедневно размещаются уникальные новости.

И что конкретно потеряли (недополучили) посетители из-за того, что эти сайты работают без БД?

   
 
 автор: kasmanaft   (26.10.2007 в 18:47)   письмо автору
 
   для: Владимир55   (26.10.2007 в 17:46)
 

>> Первый (и единственный, если не последний) динамический сайт с БД я сделал на СМС Joomla. Я приводил на него ссылку на этом форме - он даже изначально, с небольшим количеством страниц открывался заметно медленней статического
Честно говоря, слабо верится... Генерация обычной странички с использованием БД - сотые доли секунды. Как тут разницу заметить? *пожимает_плечами*
Не знаю, что и сказать. На разработку всяких БД уходят миллионы долларов.. А мужики-то и не знают, что гораздо быстрее все работает на файлах.

>> Что же в этом плохого? Какие тут недостатки?
На кучу мелких файлов уходит больше места :)

>> И что конкретно потеряли (недополучили) посетители из-за того, что эти сайты работают без БД?
Да ничего не потеряли.. им-то какое дело. И вообще, если уж на то пошло, раньше как-то и без PHP справлялись.

____

А если по теме, то между Вашими двумя способами, наверное лучше второй.

   
 
 автор: Владимир55   (26.10.2007 в 19:32)   письмо автору
 
   для: kasmanaft   (26.10.2007 в 18:47)
 

СПАСИБО!

   
 
 автор: Ralph   (26.10.2007 в 21:52)   письмо автору
 
   для: Владимир55   (26.10.2007 в 19:32)
 

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

   
 
 автор: Владимир55   (26.10.2007 в 23:00)   письмо автору
 
   для: Ralph   (26.10.2007 в 21:52)
 

*** когда вам понадобится не элементарное чтение данных,а обработка,тогда вы и оцените всю прелесть баз***

Это да.

   
 
 автор: Unkind   (26.10.2007 в 20:15)   письмо автору
 
   для: Владимир55   (26.10.2007 в 17:46)
 

Что плохого? А сделайте поиск по этим 4000 файлам. Сколько это займет?

Если Вы храните даже в *.htm, то что Вы будете делать при смене дизайна? Опять попросите написать паттерн для замены информации в тысячах файлов?

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

   
 
 автор: Владимир55   (26.10.2007 в 23:10)   письмо автору
 
   для: Unkind   (26.10.2007 в 20:15)
 

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

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

Кстати, есть такая СМС "ВЭБДиректор". Она довольно известна среди тех, кто интересуется системами управления сайтом. Так вот, она работает на статический html-файлах. И считается самой быстрой.

   
 
 автор: Ralph   (26.10.2007 в 23:40)   письмо автору
 
   для: Владимир55   (26.10.2007 в 23:10)
 

Если вернуться к началу,то я считаю,что одна интерпретируемая команда будет исполняться быстрее,чем 100.000 интерпретируемых команд ( в смысле одна команда,но в цикле).Насчет быстродействия... Однажды в этом форуме нашел тему насчет торможения механизма сессий при их большом количестве и сам провел эксперимент-создал директорию с 10.000 уникальными файлами.Результат-поиск файла через file_exists-0.01 сек.,чтение его-0.2 сек.Так что лично я склоняюсь к Вашему второму варианту...

   
 
 автор: Владимир55   (27.10.2007 в 00:25)   письмо автору
 
   для: Ralph   (26.10.2007 в 23:40)
 

Спасибо!

   
 
 автор: bronenos   (26.10.2007 в 16:55)   письмо автору
 
   для: Владимир55   (26.10.2007 в 16:27)
 

Учтите, что в БД файлы открываются методами C++, а вы - PHP, а поскольку PHP - компилируемый язык, то то, что сделано на C++ в этих же целях, летает быстрее, даже несмотря на эти "служебные махинации"

   
 
 автор: Владимир55   (26.10.2007 в 17:01)   письмо автору
 
   для: bronenos   (26.10.2007 в 16:55)
 

Да, это очень важное обстоятельство.

   
 
 автор: jiraff   (26.10.2007 в 18:56)   письмо автору
 
   для: bronenos   (26.10.2007 в 16:55)
 

>PHP - компилируемый язык
какой-какой?

   
 
 автор: Drago   (26.10.2007 в 19:17)   письмо автору
 
   для: jiraff   (26.10.2007 в 18:56)
 

>>PHP - компилируемый язык
>какой-какой?
*Интерпретируемый

   
 
 автор: bronenos   (27.10.2007 в 00:41)   письмо автору
 
   для: Drago   (26.10.2007 в 19:17)
 

ой, заговорился, интерпретируемый конечно =)))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования