@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.
Прошу прощения за корявый вопрос.
Просто я по глупости не ожидал подобного, уже многое сделал, теперь переделывать, что нервирует.
  • Вопрос задан
  • 258 просмотров
Пригласить эксперта
Ответы на вопрос 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 в данном случае куда меньший. И они правы, что так настроили.

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

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

Войти через центр авторизации
Похожие вопросы