Задать вопрос
@VZVZ
Reverse-Engineer, Software Developer, Architect

Почему на хостинге запись всего лишь 1 значения (Timestamp) в БД MySQL работает быстрее, чем в файл, хотя у меня на компе быстрее файл?

Повторюсь: значение всего лишь 1. Это TIMESTAMP.
1 столбец, 1 строка.

Вариант с таблицей:
в БД MySQL есть таблица с одним столбцом и одной строкой, в ней некое значение.
В PHP делается UPDATE.
Замеряется производительность именно этого UPDATE.

Вариант с файлом:
file_put_contents("имя_файла", "значение");
То есть файл получается текстовый, весит он 10 байт.

На моем компе с файлом гораздо быстрее, что и логичнее, ведь в файле по большому счету ни одного лишнего байта не пишется, а в БД помимо самого значения пишутся и еще байты, это уже принцип БД.
Однако на хостинге (это hostinger.ru - НЕ реклама, хостинг не очень хорош) все иначе, вариант с БД занимает 1-2 мсек (собсна UPDATE-запрос), с файлом - до десятков-сотен мсек.

Вопросы:
1) Какие могут быть тому причины, КРОМЕ того, что БД у них лежит на другом хосте, который, по-видимому, быстрее (а у меня все на 1 компе)?

1.1) Если никаких, то, значит, вывод из моих наблюдений: сервак с MySQL у них быстрее?

2) Часто ли у хостеров БД на другом хосте? Часто ли быстрее?

3) Еще есть идея попробовать бинарный вариант (ИМХО ерунда - 6 байт погоды не делают), также попробовать fopen-fwrite-fclose (ИМХО быстрее относительно file_put_contents, но тоже немного)...

P.S.
Прошу прощения за корявый вопрос.
Просто я по глупости не ожидал подобного, уже многое сделал, теперь переделывать, что нервирует.
  • Вопрос задан
  • 268 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
@iamFake
Вы рассматриваете вопрос записи данных на диск слишком узко.

Запись одного значения в файл не будет особо отличаться от записи одного значения в таблицу приведённую вами в пример. Да, субд имеют свой оверхед, но современные субд очень сильно оптимизированы и в данном случае разница значительной не будет.

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

Только вот если ФС сказала "ОК" - это еще не означает, что данные были физически записаны на диск... Данные могут еще довольно существенное время (вплоть до сотен милисекунд) находится в кэше ФС и лишь после быть "сброшены" на диск. А вот современные субд, заботясь о целостности данных как правило после ответа фс "ОК" - отдают еще команду синхронизации, принудительно заставляя ФС скинуть данные на диск и только после этого, возвращают вам успешный ответ... От сюда, в пределах вашего примера, незначительная разница в скорости, с вашей точки зрения - может стать значительной...

Что касается вопроса про хостера, причин тоже может быть не мало... База может находится на SSD диске или RAID массиве (0 или 01 например)... Может быть разница в приоритете работы с диском (ionice) и прочие административные ограничения хостера, дабы клиент не "положил" сервак бешенным IO к диску.

Да, у хостеров БД часто на другом сервере находится. Таким образом оборудование чётко разделяется на зоны применения и каждая зона настраивается максимально под узкие задачи, что приводит к значительному упрощению администрирования и приличному росту производительности. А так же росту оверхеда если общение через TCP протокол.
Ответ написан
riky
@riky
Laravel
открою вам небольшую тайну, если вам нужна супер скорость и вы храните такие простые данные - используйте просто redis (или даже memcache на худой конец).

зачем сравнивать файлы vs mysql если вас не устраивает их скорость?
Ответ написан
unitby
@unitby
Все нормально. База отрабатывает быстрее и в порядке приоритетов. Запись на диск, да еще через php в данном случае куда меньший. И они правы, что так настроили.

При этом можно предположить похожее:
Соединение с базой всегда открыто, к примеру через сокет, база также держит открытым дескриптор файла с данными.
А вам нужно получить дескриптор, сделать запись, закрыть файл. Уже куда дольше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽