[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Что быстрее mysql или файл?
savelikan
Доброго времени суток)
Интересует вопрос.
Вот храню я всю информацию сайта в базе данных. хостер посоветовал, что если размер базы будет больше 1Гб, сайт может периодически "падать", мол, берите выделеный сервер.
Потому заинтересовался некою информацию хранить в файлах. Все, что нужно, выводить каждую строку одну за другой, тоесть не нужно ничего искать в файле.

Если в файл закинуть от 100 до 300 строк, по сравнению с mysql нагрузка на сервер будет больше или меньше?
И если я храню маленькие картинки в формате base64, тогда текстовый файл базы данных будет около 1-3мб. так же интересует нагрузка на сервер в таком случае будет больше или менше, по сравнению с mysql?

_____________
Одесса - мой город!)))
walerus
savelikan
Что мешает запилить тест с мускулем и файлами?, запустить 100500 раз и посмотреть результат.
sergeiss
Цитата (savelikan @ 24.01.2017 - 22:13)
хостер посоветовал, что если размер базы будет больше 1Гб, сайт может периодически "падать",

Уходи от такого хостера, у которого БД в 1 ГБ глючит. Нефиг там делать.

Цитата (savelikan @ 24.01.2017 - 22:13)
И если я храню маленькие картинки в формате base64

А зачем их так хранить? В чем ты видишь преимущество такого формата?

Вопрос "Мускуль супротив файлов" уже многократно обсасывался тут на форуме smile.gif

Самое главное - любая БД также хранит данные в файлах. Разница с обычным набором файлов в том, что еще есть посредник, в виде собственно СУБД, который позволяет максимально эффективно это всё использовать.
Если у тебя просто "тупой" вывод инфы, безо всякого поиска, сортировки, фильтрации - то да, на файлах может получиться побыстрее.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
savelikan
Цитата (sergeiss @ 24.01.2017 - 21:43)
Цитата (savelikan @ 24.01.2017 - 22:13)
хостер посоветовал, что если размер базы будет больше 1Гб, сайт может периодически "падать",

Уходи от такого хостера, у которого БД в 1 ГБ глючит. Нефиг там делать.

Цитата (savelikan @ 24.01.2017 - 22:13)
И если я храню маленькие картинки в формате base64

А зачем их так хранить? В чем ты видишь преимущество такого формата?

Вопрос "Мускуль супротив файлов" уже многократно обсасывался тут на форуме smile.gif

Самое главное - любая БД также хранит данные в файлах. Разница с обычным набором файлов в том, что еще есть посредник, в виде собственно СУБД, который позволяет максимально эффективно это всё использовать.
Если у тебя просто "тупой" вывод инфы, безо всякого поиска, сортировки, фильтрации - то да, на файлах может получиться побыстрее.

Ну, по крайней мере так говорил хостер. но вот сейчас у меня около 900мб база и работает отлично. Сижу там, потому, что не дорого - почти доллар за 10Гб, 256 озу...

А храню картинки в base64 потому, что есть ограничение по количеству файлов - 200000
Да и на файловой системе картинка на 500байт будет занимать 4кб

_____________
Одесса - мой город!)))
T1grOK
СУБД решают проблемы многопоточности и конкурентного доступа, чего не скажешь о файлах.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
savelikan
Цитата (T1grOK @ 25.01.2017 - 07:45)
СУБД решают проблемы многопоточности и конкурентного доступа, чего не скажешь о файлах.

При использовании fgets файл не загружается целиком в ОЗУ?
Чтобы прочитать строку до конца, нужно в качестве параметра $length написать 999999?

что указать в $handle, если мне нужно прочитать, например, только пятую строку?


_____________
Одесса - мой город!)))
T1grOK
Цитата (savelikan @ 25.01.2017 - 06:38)
При использовании fgets файл не загружается целиком в ОЗУ?

Нет, не загружается
Цитата (savelikan @ 25.01.2017 - 06:38)
Чтобы прочитать строку до конца, нужно в качестве параметра $length написать 999999?

Нет. Длину опускаем и чтение производится ровно до конца строки.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Цитата (savelikan @ 25.01.2017 - 06:38)
что указать в $handle, если мне нужно прочитать, например, только пятую строку?

Прочитать 4 строки, без накопления в памяти, а 5-ую вернуть как результат. Читать все равно придется лишние данные(если не реализовать дополнительных механизмов).

P.S. Плохая идея использовать файлы.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
savelikan
Цитата (T1grOK @ 25.01.2017 - 09:01)
Цитата (savelikan @ 25.01.2017 - 06:38)
что указать в $handle, если мне нужно прочитать, например, только пятую строку?

Прочитать 4 строки, без накопления в памяти, а 5-ую вернуть как результат. Читать все равно придется лишние данные(если не реализовать дополнительных механизмов).

P.S. Плохая идея использовать файлы.

Тоесть лучше в субд?

_____________
Одесса - мой город!)))
T1grOK
Да.
Файлы подойдут только для примитивных выборок и преимущественно однопользовательском доступе к данным.
Во всех остальных случаях предпочтительнее СУБД.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
savelikan
Кстате, вот результат моих тестов с файлом в 950кб и поиском в mysql размером 200мб,
время в мс файл/mysql
получить одну строку 1 раз: 2,8/11,1
получить одну строку 10 раз: 30,4/14,1
получить одну строку 100 раз: 300,5/35,8
получить одну строку 1000 раз: 2972.2/322.6

и то же на сервере с SSD
получить одну строку 1 раз: 0,8/1,3
получить одну строку 10 раз: 6,4/1,7
получить одну строку 100 раз: 51,6/5,2
получить одну строку 1000 раз: 806,4/645,5
получить одну строку 10000 раз: 16249.5/9106.7


Но! Если файл 55кб, тогда:
получить одну строку 1 раз: 0,4/11,4
получить одну строку 10 раз: 3,5/15,1
получить одну строку 100 раз: 30,1/35,8
получить одну строку 1000 раз: 302,4/345


$GLOBAL_timestart = microtime(true);
for($a=0;$a<1000;$a++){
$f=file("296.txt");
echo $f[0].'<br>';
}
echo '<br><br><br><br> выполнено ЗА: '.round((microtime(true)-$GLOBAL_timestart)*1000,1).'<br><br>';


$GLOBAL_timestart = microtime(true);
for($a=0;$a<1000;$a++){
$SQL = $mysql->query('select * from `aaa` where `id` = 50');
$TST = $mysql->fetch_array($SQL);
echo $TST['zzz'].'<br>';
}
echo '<br><br><br><br>выполнено ЗА:'.round((microtime(true)-$GLOBAL_timestart)*1000,1);


_____________
Одесса - мой город!)))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.