2012-04-30 37 views
18

Miré alrededor de Google pero no encontré ninguna buena respuesta. ¿Almacena los datos en un archivo grande? ¿Qué métodos utiliza para hacer que el acceso a los datos les sea más rápido simplemente leyendo y escribiendo en un archivo normal?¿Cómo almacena MySQL los datos

+2

Es posible que desee examinar los diferentes motores de base de datos que utiliza. Algunos almacenan datos en un "archivo grande" mientras que otros están en la memoria. Para la velocidad de acceso, utiliza columnas y filas de tamaño fijo, por lo que acceder a un registro en particular es más fácil que escanear todo el texto. También puede mantener índices de datos para hacer que la recuperación sea aún más rápida. El motor por defecto y más utilizado es mi isam. Otros incluyen inno-db y MEMORY. – gcochard

+0

@Greg, pero incluso una tabla de memoria se almacena en algún lugar para garantizar la persistencia. La conclusión es que está almacenado en algún lugar del disco. – Namphibian

+0

@ Los datos de Nafhibian en las tablas de memoria no son persistentes, solo la estructura es – Cez

Respuesta

15

¿Almacena los datos en un archivo grande?

Algunos DBMSes almacenar toda la base de datos en un solo archivo, algunas tablas divididas, índices y otros tipos de objetos para separar los archivos, no presenta alguna fractura por objeto especie, sino por algunos criterios de almacenamiento/tamaño, algunos pueden incluso entirely bypass the file system, etc ...

No sé cuál de estas estrategias utiliza MySQL (probablemente depende de si usas MyISAM vs. InnoDB etc.), pero afortunadamente, no importa: desde la perspectiva del cliente , este es un detalle de implementación DBMS del que el cliente rara vez debería preocuparse.

¿Qué métodos utiliza para hacer que el acceso a los datos sea más rápido simplemente leyendo y escribiendo en un archivo normal?

En primer lugar, DBMSes no son sólo sobre el rendimiento:

  • Son aún más sobre seguridad de sus datos - que tienen que asegurar que no haya corrupción de datos, incluso en la cara de una corte de energía o una falla de red.
  • DBMSes también son aproximadamente concurrencia - tienen que arbitrar entre múltiples clientes que acceden y potencialmente pueden modificar los mismos datos.

cuanto a su pregunta específica de rendimiento, datos relacional es muy "sensible" a la indexación y la agrupación, que está ricamente explotada por DBMSes a conseguir un rendimiento. Además de eso, la naturaleza de SQL basada en conjuntos permite al DBMS elegir la forma óptima de recuperar los datos (en teoría, al menos, algunos DBMS son mejores que otros). Para obtener más información sobre el rendimiento de DBMS, lo recomiendo encarecidamente: Use The Index, Luke!

Además, probablemente haya notado que la mayoría de los DBMS son productos bastante antiguos. Como décadas anterior, que realmente es eons en términos de nuestra industria. Una consecuencia de esto es que la gente tenía mucho tiempo para optimizar la base de código DBMS.

En teoría, podría lograr todo esto a través de archivos, pero sospecho que terminaría con algo que se parece mucho a un DBMS (incluso si tuviera el tiempo y los recursos para hacerlo). Entonces, ¿por qué reinventar la rueda (a menos que no quisieras la rueda en primer lugar;))?


Por lo general, a pesar de algún tipo de "diario" o mecanismo de "registro de transacciones". Además, para minimizar la probabilidad de corrupción "lógica" (debido a errores de aplicación) y promover la reutilización de código, la mayoría de los DBMS soportan restricciones declarativas (dominio, clave y referencial), desencadenantes y procedimientos almacenados.

Por isolating transactions e incluso por permitiendo a los clientes para bloquear explícitamente porciones específicas de la base de datos.

1

Técnicamente todo es un "archivo" que incluye carpetas ... todo su disco duro es un archivo gigante. Habiendo dicho eso, sí bases de datos relacionales, MySQL incluyó los datos almacenados en un archivo de datos en el disco duro. La diferencia entre una base de datos y escribir/leer en un archivo es manzanas y naranjas. Las bases de datos proporcionan una forma estructurada de almacenar y buscar/recuperar datos de una manera que nunca podría replicar simplemente leyendo y escribiendo en un archivo. A menos que haya escrito su propio db, por supuesto ...

Espero que ayude.

3

Cuando almacena datos en un archivo plano, es compacto y eficiente para leer de forma secuencial, pero no hay una manera rápida de acceder a él al azar. Esto es especialmente cierto para datos de longitud variable como documentos, nombres o cadenas. Para permitir un acceso aleatorio rápido, la mayoría de las bases de datos almacenan información en un solo archivo utilizando una estructura de datos llamada B-Tree. Esta estructura permite insertar, eliminar y buscar para ser rápido, pero puede usar hasta 50% más de espacio que el archivo original. Normalmente, sin embargo, esto no es un problema ya que el espacio en disco es barato y más grande, mientras que las tareas principales generalmente requieren un acceso rápido. Para más información: http://en.wikipedia.org/wiki/B-tree

Mirando cuidadosamente en la documentación de MySQL, nos encontramos con que los índices se pueden fijar opcionalmente con o escribe "BTREE" "hash". Dentro de un único archivo MySQL, se almacenan múltiples índices que pueden usar cualquier estructura de datos.

Aunque la seguridad y la concurrencia son importantes, estas no son POR QUÉ las bases de datos existen, sino que tienen funciones adicionales. Las primeras bases de datos existen porque no es posible acceder aleatoriamente a un archivo secuencial que contiene datos de longitud variable.

3

Esta pregunta es un poco antigua, pero decidí responder de todos modos ya que he estado investigando sobre lo mismo. Mi respuesta se basa en el sistema de archivos de Linux. Básicamente mySQL almacena datos en archivos en su disco duro. Almacena los archivos en un directorio específico que tiene la variable de sistema "datadir". Abrir una consola mysql y ejecutar el siguiente comando le indicará exactamente dónde se encuentra la carpeta.

mysql> SHOW VARIABLES LIKE 'datadir'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+ 1 row in set (0.01 sec)

como se puede ver en el comando anterior, mi "datadir" se encuentra en /var/lib/mysql/. La ubicación del "datadir" puede variar en diferentes sistemas. El directorio contiene carpetas y algunos archivos de configuración. Cada carpeta representa una base de datos mysql y contiene archivos con datos para esa base de datos específica. a continuación se muestra una captura de pantalla del directorio "datadir" en mi sistema.

sample "datadir" directory screnshot

Cada carpeta en el directorio representa una base de datos MySQL. Cada carpeta de base de datos contiene archivos que representan las tablas en esa base de datos. Hay dos archivos para cada tabla, uno con una extensión .frm y el otro con una extensión .idb. Vea la captura de pantalla a continuación.

sample mysql database table screenshot

los almacenes de archivos .frm tabla de formato de la tabla. Consulte aquí para obtener información detallada MySQL .frm File Format

el archivo .ibd almacena los datos de la tabla.marque aquí para información detallada InnoDB File-Per-Table Tablespaces

¡Eso es gente! espero haber ayudado a alguien

Cuestiones relacionadas