¿Qué es mejor / más rápido? MySql o FileSystem?


9

Imaginemos un sitio web que es un directorio de personas. Para cada persona puede haber una foto de perfil y una biografía.

Admito que mis consultas SQL podrían ser mejores, pero en general lo que sería más rápido y usaría menos potencia de procesamiento.

Para verificar si existe un archivo y luego abrirlo o

verifique con MySql para ver si existe una biografía y mostrarla.

Estoy bastante seguro de que en el caso anterior el sistema de archivos fumará la base de datos mysql.

¿Qué sucede si convierto la base de datos en un archivo txt delimitado de solo lectura?

¿Qué es más rápido en este caso?

¿Hay algún punto en el que si el archivo txt tiene demasiados registros es mejor usar MySql?


44
Digamos que tienes 100K personas en tu directorio y quieres la biografía de los que nacieron en 1978. ¿De dónde crees que vendrá el humo? ¿Abrir archivos de 100K en el sistema de archivos o una sola consulta en SQL?
ypercubeᵀᴹ

1
@ypercube: estoy de acuerdo con usted, pero en el caso del sistema operativo Linux hay un límite para los archivos abiertos simultáneamente con cada procesador.
Satish Pandey

Respuestas:


17

El sistema de archivos es útil si está buscando un archivo en particular, ya que los sistemas operativos mantienen una especie de índice. Sin embargo, el contenido de un archivo txt no se indexará, que es una de las principales ventajas de una base de datos. Otro es comprender el modelo relacional, de modo que los datos no tengan que repetirse una y otra vez. Otro es entender los tipos. Si tiene un archivo txt, deberá analizar números, fechas, etc.

Entonces, el sistema de archivos podría funcionar para usted en algunos casos, pero ciertamente no en todos.


+1, también los sistemas de archivos no son buenos para búsquedas parciales en nombres de archivos u otros atributos. Cuando el número de archivos es tan grande, puede tener problemas para encontrar archivos de esta manera. Dicho esto, es común usar el sistema de archivos para datos que no son de naturaleza transaccional y en los que siempre se accede al contenido como una unidad, como archivos adjuntos de documentos y archivos de imágenes.
NoChance

12

Realmente depende de lo que estés haciendo. En general, la velocidad a la que puede abrir un archivo para leer será mejor que la velocidad a la que puede establecer una conexión de red. Entonces, para operaciones muy simples, el sistema de archivos es definitivamente más rápido. Los sistemas de archivos probablemente también superarán a un RDBMS para el rendimiento de lectura sin procesar, ya que hay menos sobrecarga. De hecho, si lo piensa, la base de datos nunca puede ser más rápida que el sistema de archivos en términos de rendimiento bruto.

Para operaciones muy complejas, es probable que el sistema de archivos sea muy lento. Por ejemplo:

Lea 10 líneas de este archivo de mil millones de líneas y luego busque líneas coincidentes en este otro archivo. Te compadezco si tienes que hacer esto. Sin embargo, un buen servidor de base de datos tiene estrategias para hacerlo rápido y bien, de modo que no reinventes la rueda.

Además, realmente necesitas descubrir lo que estás haciendo. ¿Qué datos estás almacenando? ¿Cómo lo vas a transformar? Si se trata de 100k archivos de imagen, su solución se verá muy diferente de si es un directorio para 100k personas. (¿LDAP tal vez? ¿O una base de datos SQL? Depende de lo que esté haciendo, tal vez). La clave aquí es elegir las herramientas que coincidan con lo que está haciendo y que le den espacio para agregar más usos, en lugar de lo que parezca más rápido para algunos caso de uso bastante abstracto. Las bases de datos son herramientas maravillosas, pero no puede obtener una buena respuesta a una pregunta como esta.

Finalmente, la optimización prematura es la raíz de todo mal. Elija herramientas útiles ahora y descubra el resto más adelante.


Por supuesto, si tiene dos instancias virtuales que se comunican a través de una NIC virtual, o una base de datos que se ejecuta en la misma instancia que el servidor de aplicaciones, si tiene una cantidad razonable de memoria, puede asegurarse de que la lectura de la base de datos sea más rápida que la lectura de fs del tiempo, porque si confía en el sistema de archivos, está a merced del algoritmo de reemplazo de página / almacenamiento en caché del controlador fs, mientras que una base de datos puede reservar segmentos de memoria para que nunca se intercambien, poniendo primero las necesidades de latencia de su aplicación . Suponiendo que tiene habilitado el intercambio.
Parthian Shot

Tu última línea me impulsa ... @Chris Travers
Biswadeep Sarkar

5

El sistema de archivos podría ser más rápido inicialmente, pero lo dudo. Sin embargo, a medida que aumenta el tamaño de sus datos, es probable que tenga que reestructurar su sistema de archivos para mantener el rendimiento. Además de su capacidad obvia de indexar en múltiples atributos, las bases de datos tienden a escalar mejor.

Los cachés web que funcionan de manera similar a lo que está considerando utilizan el árbol de directorios para mantener el rendimiento. También tienden a ser de una escala relativamente fija, por lo que no tienen que lidiar con una escala creciente.

Para este tipo de aplicación, comenzaría con una base de datos, ya que se ajusta mejor a sus necesidades. Se escalará mucho mejor a largo plazo. En comparación con la mayoría de los sistemas de archivos, una base de datos también será más eficiente en cuanto al espacio.


44
Bueno, eso no es un problema. Simplemente creemos otro archivo que enumere los valores y busquemos compensaciones. De hecho, podríamos optimizar esto para buscar con btrees. ¡Entonces sabemos dónde leer el archivo! A continuación, supongo que deberíamos agregar un lenguaje de consulta declarativa a nuestro pequeño programa capaz de unir resultados entre diferentes archivos delimitados y luego tal vez el cumplimiento de ACID ... Con el tiempo, bueno, ¿por qué usar un RDBMS? ;-)
Chris Travers

@ChrisTravers He estado allí, hecho eso, y estoy mucho más feliz usando una base de datos.
BillThor

55
La idea era "Los que no aprenden de UNIX están destinados a reinventarlo mal".
Chris Travers

1

Siempre me encanta venir a estos foros y leer todos los gurús de bases de datos pesados ​​que el sistema de archivos no puede hacerlo tan rápido como la base de datos. Por el contrario, un árbol correctamente distribuido, tablas hash bien diseñadas y guardarlas como un objeto en un archivo producirá las mismas velocidades que una base de datos y de mis pruebas. Una tabla hash y un árbol de directorios correctamente diseñados ganarán cada vez. Mucho menos sobrecarga. Recientemente me he alejado de la programación basada en bases de datos y más en el árbol de archivos por simplicidad y portabilidad del programa. Sin base de datos significa una copia de seguridad fácil, simplemente cierre su árbol y listo. Es muy agradable y una recomendación programar de esta manera para clientes únicos con pequeñas aplicaciones. Mira la gran foto, ¿tengo tiempo para diseñar la mía o simplemente aprovechar lo que ya está allí como el db? Personalmente, me gusta guardar mis objetos en un archivo y usarlos más tarde, solo vigile el tamaño de sus tablas y busque el uso de un RandomAccessFile para poder diseñarlo rápidamente como una base de datos y dividirlo en objetos de tabla hash . Disfrutar. Recuerde que cualquier dato que almacene en el archivo consumirá el doble del uso de memoria a veces dependiendo de su código. La tabla hash en sí y, por lo general, dónde la consume para ver.


3
La única respuesta apropiada a esto que puedo pensar es esta .
Mark Storey-Smith

3
@ MarkStorey-Smith, ese es un enlace interesante, pero ¿es presuntuoso dar a entender que esta solución está en el espectro de Dunning-Kruger en alguna parte? :)
David Mann
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.