2009-02-18 26 views
5

Supongamos los mismos entornos para PHP5 que trabajan con archivos MySQL5 y CSV. MySQL está en el mismo host que los scripts alojados.CSV vs MySQL rendimiento

¿Será MySQL siempre más rápido que recuperar/buscar/cambiar/agregar/eliminar registros a CSV?

¿O hay alguna cantidad de datos por debajo de la cual el rendimiento de PHP + CSV es mejor que usar el servidor de la base de datos?

+0

¿Cuáles son sus medidas de referencia para CSV frente a MySQL? Generalmente, CSV es mucho, mucho más rápido que MySQL. Sin embargo, su pregunta dice que MySQL será más rápido. ¿Qué estás haciendo que hace que MySQL sea más rápido que CSV? –

Respuesta

6

CSV no le permitirá crear índices para la búsqueda rápida.

Si siempre necesita todos los datos de una sola tabla (como application settings), CSV es más rápido; de lo contrario, no.

ni siquiera considero SQL queries, transactions, data manipulation o concurrent access aquí, como CSV ciertamente no es para estas cosas.

+0

Probablemente haya otros casos extremos en los que el CSV es más rápido ... pero este es el único en el que podría pensar también. :) – jheriko

0

Las bases de datos son para almacenar y recuperar datos. Si necesita algo más que una simple adición de línea/entrada o una lista masiva, ¿por qué no opta por la base de datos? De lo contrario, básicamente tendría que codificar la funcionalidad (incluido el borrado, la clasificación, etc.) usted mismo.

0

CSV es un formato increíblemente frágil y requiere que su aplicación haga todo el formateo y las calcuaciones. Si necesita actualizar un registro específico en una csv, primero tendrá que leer todo el archivo csv, encontrar que la entrada en la memoria debería cambiar y luego volver a escribir todo el archivo. Esto se pone muy lento muy rápido. CSV solo es útil para escribir una vez, leer una vez escribir aplicaciones.

4

No, MySQL, probablemente será más lenta para la inserción (introducción a un CSV es muy rápido) y la mesa de exploración (no basados ​​en búsquedas de índice).

La actualización o eliminación desde un archivo CSV no es trivial; lo dejo como ejercicio para el lector.

Si utiliza un archivo CSV, tiene que ser muy cuidadoso para manejar múltiples hilos/procesos correctamente, de lo contrario obtendrá datos erróneos o corruptos su archivo.

Sin embargo, hay otras ventajas también. ¿Te preocupa cómo te va ALTER TABLE en un CSV?

El uso de un CSV es una muy mala idea si alguna vez necesita actualizaciones, eliminaciones, ALTER TABLE o para acceder al archivo de más de un proceso a la vez.

3

Como persona que proviene de la industria de datos, he tratado exactamente esta situación.

En términos generales, MySQL será más rápido.

Sin embargo, usted no indica el tipo de aplicación que se está desarrollando. ¿Está desarrollando una aplicación de almacenamiento de datos que se utiliza principalmente para buscar y recuperar registros? ¿Cuántos campos suelen estar presentes en sus registros? ¿Cuántos registros suelen estar presentes en sus archivos de datos? ¿Estos archivos tienen propiedades relacionales entre sí, es decir, tienen un archivo de clientes y un archivo de pedidos de clientes? ¿Cuánto tiempo tienes para desarrollar un sistema?

La respuesta dependerá de la respuesta a las preguntas enumeradas anteriormente.Sin embargo, generalmente puede usar lo siguiente como una guía:

Si está creando una aplicación de depósito de datos con registros que superan el millón, puede considerar abandonar ambos y pasar a Column Oriented Database.

CSV probablemente sea más rápido para conjuntos de datos más pequeños. Sin embargo, desplegar sus propias rutinas de inserción en CSV podría ser doloroso y perder las ventajas de la indexación de la base de datos.

Mi recomendación general sería usar MySql, como dije anteriormente, en la mayoría de los casos será más rápido.

1

Desde el punto de vista del rendimiento puro, depende completamente de la operación que esté realizando, como dice @MarkR. Agregar a un archivo plano es muy rápido. Como está leyendo en el archivo completo (para una búsqueda no indexada u otros fines).

La única manera de saber con certeza qué funcionará mejor para sus casos de uso en su plataforma es hacer un perfil real. Puedo garantizarle que hacer un escaneo de tabla completo en una base de datos de un millón de filas será más lento que grep en un archivo CSV de un millón de líneas. Pero eso probablemente no sea un ejemplo realista de su uso. Los "puntos de interrupción" variarán enormemente dependiendo de su combinación particular de recuperación, búsqueda indexada, búsqueda no indexada, actualización, agregar.

Para mí, esto no es un problema de rendimiento. Sus datos suenan orientados a registros, y MySQL es muy superior (en términos generales) para tratar con ese tipo de datos. Si sus casos de uso son incluso un poco complicados para el momento en que sus datos crecen, tratar con un archivo CSV de 100k líneas será espantoso en comparación con una tabla db de grabación de 100k, incluso si el rendimiento es marginalmente mejor (lo cual no es cierto). significa garantizado).

1

Depende del uso. Por ejemplo, para archivos de configuración o de idioma, CSV podría funcionar mejor. De todos modos, si está utilizando PHP5, tiene la tercera opción: SQLite, que viene integrado en PHP. Le brinda facilidad de uso, como archivos regulares, pero robustez de RDBMS.