CSV против производительности MySQL

Предположим, что те же среды для PHP5 работают с файлами MySQL5 и CSV. MySQL находится на том же хосте, что и хост-скрипты.

Будет ли MySQL всегда быстрее, чем поиск / поиск / изменение / добавление / удаление записей в CSV?

Или есть некоторый объем данных, ниже которых производительность PHP + CSV лучше, чем использование сервера базы данных?

CSV не позволит создавать индексы для быстрого поиска.

Если вам всегда нужны все данные из одной таблицы (например, для application settings ), CSV работает быстрее, иначе нет.

Я даже не рассматриваю SQL queries , transactions , data manipulation или concurrent access здесь, поскольку CSV , конечно же, не для этих вещей.

Нет, MySQL, вероятно, будет медленнее для вставки (добавление в CSV происходит очень быстро) и поиска по таблицам (без индексов).

Обновление или удаление из CSV нетривиально – я оставляю это как упражнение для читателя.

Если вы используете CSV, вам нужно быть очень осторожным, чтобы обрабатывать несколько потоков / процессов правильно, иначе вы получите плохие данные или повредите ваш файл.

Однако есть и другие преимущества. Позаботьтесь о том, как вы делаете ALTER TABLE в CSV?

Использование CSV – очень плохая идея, если вам нужны UPDATE, DELETE, ALTER TABLE или для доступа к файлу из нескольких процессов одновременно.

Как человек, поступающий из отрасли обработки данных, я рассматривал именно эту ситуацию.

Вообще говоря, MySQL будет быстрее.

Однако вы не указываете тип приложения, которое вы разрабатываете. Вы разрабатываете приложение хранилища данных, которое в основном используется для поиска и поиска записей? Сколько полей обычно присутствует в ваших записях? Сколько записей обычно присутствует в ваших файлах данных? Имеют ли эти файлы какие-либо реляционные свойства друг к другу, т. Е. Есть ли у вас файл клиентов и файл заказов клиентов? Сколько времени у вас есть для разработки системы?

Ответ будет зависеть от ответа на вопросы, перечисленные ранее. Однако вы можете в целом использовать следующие рекомендации:

Если вы создаете приложение хранилища данных с записями, превышающими один миллион, вы можете подумать о том, чтобы отбросить оба и перейти в базу данных, ориентированную на столбцы .

CSV, вероятно, будет быстрее для небольших наборов данных. Тем не менее, запуск ваших собственных процедур вставки в CSV может быть болезненным, и вы теряете преимущества индексации базы данных.

Моя общая рекомендация состояла бы в том, чтобы просто использовать MySql, как я сказал ранее, в большинстве случаев это будет быстрее.

С точки зрения чистой производительности, это полностью зависит от операции, которую вы выполняете, как говорит @MarkR. Добавление к плоскому файлу происходит очень быстро. Как читается во всем файле (для неиндексированного поиска или других целей).

Единственный способ узнать наверняка, что будет лучше для ваших случаев использования на вашей платформе, – это сделать фактическое профилирование. Я могу гарантировать, что выполнение полного сканирования таблицы в миллионной базе данных будет медленнее, чем grep на миллионной CSV-файле. Но это, вероятно, не является реалистичным примером вашего использования. «Контрольные точки» будут сильно различаться в зависимости от вашего конкретного сочетания извлечения, индексированного поиска, неиндексированного поиска, обновления, добавления.

Для меня это не проблема производительности. Ваши данные звучат ориентированно на запись, а MySQL значительно превосходит (в общих чертах) для работы с такими данными. Если ваши случаи использования даже немного усложняются к тому времени, когда ваши данные станут большими, работа с файлом CSV на 100 тыс. Строк будет ужасающей по сравнению с таблицей db 100 бит, даже если производительность будет немного лучше (что означает гарантированное).

Зависит от использования. Например, для конфигурационных или языковых файлов CSV может улучшиться. Во всяком случае, если вы используете PHP5, у вас есть третий вариант – SQLite, который встроен в PHP. Это дает вам простоту использования, как обычные файлы, но надежность RDBMS.

Базы данных предназначены для хранения и извлечения данных. Если вам нужно что-то большее, чем простое добавление строки / записи или массовый листинг, почему бы не пойти по пути базы данных? В противном случае вам придется в основном выполнять функции (включая удаление, сортировку и т. Д.) Самостоятельно.

CSV – это невероятно хрупкий формат и требует, чтобы ваше приложение выполняло все форматирование и вычисления. Если вам нужно обновить spesific-запись в csv, вам нужно будет сначала прочитать весь файл csv, найти запись в памяти нужно будет изменить, а затем записать весь файл снова. Это очень быстро происходит очень быстро. CSV полезен только для однократной записи, чтения одноразовых приложений.