За последние 24 часа нас посетили 16048 программистов и 1539 роботов. Сейчас ищут 903 программиста ...

Что быстрее загрузить в массив десять чисел из файла или БД?

Тема в разделе "Прочие вопросы по PHP", создана пользователем kostyl, 1 сен 2008.

  1. kostyl

    kostyl Guest

    Подскажите что быстрее загрузить в массиф 10 чисел которые записатны последовательно через разделитель в файле на диске, или из базы мускуля из 10 записей идущих подряд, если учитывать что количество файлов в каталоге 10 000 или столько же по 10 записей в таблице... Может еще на до чтото учесть.... платформа юних
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    всё зависит от конкретной ситуации
    тогда БД
    если бы один файл с 10 записями в виде сериализованного массива был, тогда бы - файл...
    но не потому что быстрее, а потому что ради 10 статичных записей нет смысла насиловать БД
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Проще сделать два тестовых варианта и замерить скорость. БД тоже хранит данные в файле. К тому же, разве mysql_fetch_array будет работать быстрее explode? Особенно хорошая скорость считывания файла при использовании функции file_get_contents.
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    БД быстлее чем file_get_contents
    тем более там в каталоге 10000 файлов
     
  5. kostyl

    kostyl Guest

    Думаю еще такой момент как количество файлов в каталоге может проиграть серсеру БД...
     
  6. decoder

    decoder Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    А какое значение имеет количество файлов в каталоге? Вы их все будете считывать?!

    Хотя в любом случае... я бы базу выбрал - с ней удобнее работать и данные более "наглядны". Разбираться с 10000 файлов мне было бы просто как-то не по себе :)
     
  7. kostyl

    kostyl Guest

    Я думаю что ext2 ext3 могут оказывать неплохой "упор" при большом количестве файлов...
    Я просто не могу прикинуть сколько библиотек Вы загрузите в память когда работаете с БД или прямо с диском, причем хостинг провайдеры тоже жадные на память некоторые категорически откидывают использование больше 4 Мб....
     
  8. decoder

    decoder Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    К сожалению, с ФС знаком плохо. На самом деле не знаком вовсе. Просто полагал всегда, что именно количество файлов не может влиять на скорость чтения одного конкретного файла, который к тому же состоит из 10 чисел.

    Ну если уж говорить о хостинг-провайдерах. Тем более жадных, то вряд ли они дадут Вам возможность выгрузить все эти библиотеки из памяти, да и вообще как-то настраивать php. Обычно, кстати, у вас есть лимит ресурсов от всех "мощностей машины". Я сейчас обычно использую didicated серверы, но есть и один хостинг Мажордомо, где я могу использовать до 15% ресурсов машины, которая далеко не с 16 Мб оперативки.
    Кроме того, пока что я работал (ну по-серьезному, так сказать) с файлам только один раз. И то по глупости чужой. Файл тогда быстро вырос до 4-5 мб и загружаться мог по несколько раз в секунду. В итоге памяти в принципе не хватало никакой :) Разумеется, я это все переделал для работы с базой, как и надо было изначально.

    упд. Вижу смысл хранить в файлах только какие-либо статичные данные, небольшие по объему.
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Замерял. Выборка из БД работает быстрее :)
     
  10. kostyl

    kostyl Guest

    Код в студию :wink:
     
  11. Anonymous

    Anonymous Guest

    На скорость чтения - не влияет. А вот на поиск оного на диске - очень даже, причем весьма ощутимо.
     
  12. Anonymous

    Anonymous Guest

    в случае маленьких файлов нужна ReiserFS. Но в любом случае, тут нужно скорее всего хранить в базе.
     
  13. kostyl

    kostyl Guest

    скорее всего единственная выгода от хранения в файлах это - не использование сервера субд + меньше занимает дискового пространства
     
  14. decoder

    decoder Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Я как бы просто не в курсе - а в этих ФС нет индексации? Ведь в таком случае поиск нужного файла не будет занимать так много времени.

    kostyl
    Неужели у Вас такой хостер, который так жестоко ограничивает в ресурсах?! Или Вы это все из чисто теоретических рассуждений?
     
  15. Anonymous

    Anonymous Guest

    есть. каждая директория имеет лишь линейный индекс, собственно, она им и является.
     
  16. kostyl

    kostyl Guest

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

    decoder Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    По поводу:
    Пока вот искал про индексацию, напоролся на это:
    http://linuxdigest.stsland.ru/24.html
     
  18. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Для файла:
    PHP:
    1. <?php
    2. $time_start = microtime(1);
    3.  
    4. for($i=1000;$i>0;$i--){
    5.  $text=file_get_contents('test.txt');
    6.  $array=explode('|',$text);
    7. }
    8.  
    9. $time_end = microtime(1);
    10. $time = $time_end - $time_start;
    11.  
    12. /* Для наглядности */
    13. echo "Затрачено ".substr($time,0,4)." секунд";
    14. ?>
    test.txt:
    Код (Text):
    1. 1|2|3|4|5|6|7|8|9|10
    Средний результат: 0.13 сек (NTFS)

    Для БД:
    PHP:
    1. <?php
    2. mysql_connect('localhost','root','pass');
    3. $time_start = microtime(1);
    4.  
    5. for($i=1000;$i>0;$i--){
    6.  $result=mysql_query('SELECT * FROM `test`;');
    7.  while ($array[]=mysql_fetch_row($result));
    8. }
    9.  
    10. $time_end = microtime(1);
    11. $time = $time_end - $time_start;
    12.  
    13. /* Для наглядности */
    14. echo "Затрачено ".substr($time,0,4)." секунд";
    15. ?>
    Таблица test:
    Код (Text):
    1. |text|
    2. ------
    3. |1   |
    4. |2   |
    5. |3   |
    6. |4   |
    7. |5   |
    8. |6   |
    9. |7   |
    10. |8   |
    11. |9   |
    12. |10  |
    13. ------
    Средний результат: 0.21 сек (MySQL 5.0.24)

    По-моему, весьма убедительно :) Время соеденения с БД даже не считаем, т.к. считаетм, что подклчаемся не только для этого запроса.
     
  19. decoder

    decoder Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Кажется, из файла у тебя получилось все же быстрее... О_о
     
  20. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    decoder
    Ну я так и думал, в таких простых операциях как эта файлы работают быстрее.
     
  21. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    decoder
    Блин, наконец-то дошло твое сообщение ))) Я там просто опечатался.
     
  22. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    не перепутал?
     
  23. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Толку то в венде тестить...
     
  24. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Никак нет, перепутал я тут:
    . Код в студии, можете замерять :)
     
  25. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    специально на виндовом попробовал.
    [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 шустрее :)