@Andy1295

Откуда быстрее получать информацию, mysql или файл?

Нужно средствами php дёргать время от времени информацию из базы, которая в данный момент храниться в файле. Файл обновляется раз в неделю.
Как будет быстрее: Заносить данные из файла в БД и уже дёргать оттуда, хранить данные в xml, хранить данные в csv.

Было бы интересно узнать какой метод более оптимален и почему.
Беглое гугление не дало ничего конкретного.
  • Вопрос задан
  • 4636 просмотров
Пригласить эксперта
Ответы на вопрос 5
FanatPHP
@FanatPHP
Чебуратор тега РНР
Хранится? Работает? Ничего не трогай.
Ответ написан
zo0m
@zo0m
full stack developer
Ваша главная проблема, что вы не правильно ставите вопрос.

Смотря что за данные вы хотите хранить:
В каком виде приходят данные?
Структурированные?
Объем?
Смотря что вы с этими данными хотите делать:
Различные выборки?
Десериализовать в объект?
Просто вывести пользователю?

Думаю после ответа на эти вопросы вы поймете что за способ хранения вас устроит.
Ответ написан
Комментировать
@ollisso
Способы решения:
1. читаем из файла всегда
2. читаем 1 раз, храним где либо:
2.1. в БД
2.2. в xml или csv
2.4. в json
2.5. в виде пхп кода

Для того чтобы ответить на вопрос, нужно знать следующее:
1. как часто читается файл после обновления, насколько это критично чтобы работало быстро ?
2. Размер файла
3. Как именно читается - нужно читать все строки из него, или всего несколько?
4. Что с файлом дальше делается ? Например если после чтения выводим просто хтмл реестр, то почему бы его сразу не готовить, и не хранить его?
5. Ссколько много времени на разработку.

Простой пример кейса:
система уже работает, файл читается 1-2 раза в неделю.
В данный момент из оригинального файла читается около секунды
Особых лагов нет.
На разботку метода конвертация уйдёт 1-2 дня.

=> Выгоды нет по замене

Другой пример:
1. файл читается каждый раз раз в секунду.
2. из файла нужно 1-10 строк всего, по номеру
3. В файле миллионы строк

=> лучше хранить в базе обычно.

третий пример:
1. файл читается каждый раз раз в секунду.
2. файл нужен всегда весь
3. В файле миллионы строк

=> лучше хранить в пхп коде

Т.е. способы хранения данных таковы:

1. БД
+ быстрая выборка, когда нужно несколько элементов из миллиона
+ можно использвоать в качестве данных для других запросов (джойны и тп)
- временные издержки

2. XML/CSV
+ можно использовать как есть, если нужен этот формат для чего либо другого.
- очень "дорого" парсить файл каджый раз.
Не рекомендую если нет особых причин

3. JSON
+ Относительно быстро
+ удобно хранить
+ на некоторых данных быстрее чем ПХП (что странно)
- надо парсить, опкешеры не помогают
- невозможно брать только часть элементов. Если нужно 10 строк из миллиона, то придётся брать весь миллион в память.

4. PHP
Тут я имею в виду: хранить через var_export и подключать через require/include
Обязательно: чтобы был APC/opcache
+ быстро
+ удобно хранить. обрабатывать. Получаешь сразу же массив
- невозможно брать только часть элементов. Если нужно 10 строк из миллиона, то придётся брать весь миллион в память.
- иногда JSON быстрее

Что вам выбрать лучше - сложно сказать, вы не предоставили достаточно данных.
Я бы взял PHP или БД, в зависимости от ситуации.
Ответ написан
Комментировать
saksmt
@saksmt
PHP-developer, Backend
Наиболее высокое быстродействие обеспечат memcached или redis, но всё очень сильно зависит от задачи. Но если собираетесь хранить данные в файле, то лучше выбрать JSON или PHP (массив в файле[!НЕ СЕРИАЛИЗАЦИЯ!], в вашем случае это самый оптимальный вариант, т.к. opcache сделает за вас всю работу по оптимизации), т.к. xml - чрезмерно жирно почти для любой задачи, CSV позволит хранить только списки, сериализация - только если действительно сложные данные (например, целый граф объектов).
Ответ написан
opium
@opium
Просто люблю качественно работать
Все зависит от данных и сложности выборки в вашем случае за полчаса можно накидать все три варианта и просто проверить опытным путем.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы