499 votos

SQLite vs MySQL

SQLite es un único archivo de base de datos MySQL es una base de datos normal. Eso es genial, pero no estoy seguro de que es más rápido de donde o mejor, para qué...¿cuáles son los pros y los contras de cada opción?

327voto

Justin Standard Puntos 15312

SQLite es ideal para pruebas y prototipos, o para integración en aplicaciones. MySQL es digno de (a gran escala) de los entornos de producción.

Este sitio tiene la orientación en cuando para utilizar SQLite

Aquí está mi resumen personal:

SQLite:

  • fácil instalación
  • gran temporal de pruebas (bases de datos)
  • ideal para un rápido desarrollo
  • ideal para la integración en una aplicación
  • no tiene gestión de usuarios
  • no tiene muchas características de rendimiento
  • no escala bien.

MySQL:

  • mucho más difícil y complejo para configurar
  • las mejores opciones para la optimización del rendimiento
  • se puede escalar bien si ajustado correctamente
  • puede gestionar usuarios, permisos, etc.

145voto

Michal Sznajder Puntos 6292

Verificación de los Usos Adecuados Para SQLite en el SQLite página principal. Creo que es bastante razonable, y es difícil añadir nada más.

61voto

jaredg Puntos 1610

SQLite se utiliza mucho en el lado del cliente de almacenes de datos: Firefox utiliza ampliamente, diversas aplicaciones de la Apple escribió para el iPhone lo uso, yum en Linux fue reescrito para usar. Es probable que sea más flexible (especialmente en estructuras de datos e indexación) y fácil de usar que los de Berkeley DB y personalizado formatos binarios de que algunas de estas cosas que antes dependía.

Todas estas cosas tienen algo en común: sólo un proceso/subproceso probablemente se desea escribir en la base de datos en un tiempo y a un número relativamente pequeño de las cosas va a querer leer. SQLite bloques de todos los demás IO en la mesa durante una operación de escritura, que no es tanto para multi-usuario multi-threaded toda la tabla cuando empiece a hacer una actualización.

Si usted prototipo con SQLite, tenga cuidado. Es "de tipo débil" por defecto, usted puede poner una cadena en una columna de tipo entero, a menos que habilitar estricto de afinidad modo y no estoy seguro de si que ha sido implementado todavía.

46voto

dbr Puntos 66401

Parece que para una gran mayoría de los sitios de uso de MySQL, SQLite, sería más que suficiente. Sólo parece ser una mentalidad de que "si se trata de nada parecido a la producción, la tengo que usar MySQL!"

Yo diría que si usted no tiene que hacer ningún tipo de rendimiento-jugueteando con MySQL, usted puede conseguir lejos con usar SQLite..

39voto

akc42 Puntos 806

A pesar de las varias respuestas por aquí, a mí me parece que el equilibrio ha cambiado ligeramente cuando SQLite introducido WAL modo. A partir de lo que he sido capaz de descubrir, esto permite simulataneous actualizaciones sin necesidad de llegar (como mucho) la contención de bloqueo.

La gran downsite de sqlite ha sido que durante una transacción que involucra las actualizaciones a la base de datos de la totalidad de la base de datos está bloqueada, en lugar de la mucho más fino de bloqueo de otras bases de datos. Con WAL modo, cada usuario es efectivamente capaz de ver una vista coherente de datos, incluso si la otra persona está escribiendo a la base de datos - y, por tanto, los bloqueos que sqlite se aplica puede ser aplicado con menos frecuencia.

La documentación acerca de cuando el WAL es re-encorporated en la principal base de datos no es tan clara como podría ser y resulta que el de la última conexión al cierre va a escribir de nuevo (así como los demás mecanismos previstos). En un escenario donde la base de datos sqlite es el apoyo a un sitio web, siempre hay un momento en el que no hay una solicitud de página web en el progreso, el wal, se vuelve a incorporar. El 100K visitas/día figura da acerca de una 1.15 sec por golpe, por lo que si la base de datos usa gran cantidad de consultas por página, al final de la mayoría de las solicitudes de página, o justo después de una explosión si esa es la manera en la que, como el de WAL será volver a escribir. Que es, por supuesto, si es que tiene que ser - la mayoría de los hits son propensos a ser de sólo lectura de la naturaleza.

La otra cosa que parece ser importante con sqlite basado sitio web es para asegurar que todas las consultas se encuentran encerrados en una sola transacción que cubre la totalidad de la visualización de la página. Algunas pruebas en mi equipo de escritorio mostró que alrededor del 7 inserciones por segundo cuando cada uno era de una transacción y 1000/segundo cuando todos ellos estaban encerrados en una sola transacción.

Con las salvedades anteriores acerca de lo que ralentiza SQLite abajo - la ventaja es que se trata de una biblioteca, con el código que se ejecuta en el proceso que se llama, en comparación con mysql donde hay una comunicación entre procesos para cada instrucción sql. Esto debería hacer sqlite más rápido, especialmente cuando combinaciones complejas, etc se realiza en el código en lugar de sql.

Lo que realmente me gusta es la sencillez de copia de seguridad y restaurar la base de datos. Es un poco simplista decir que basta con copiar el archivo, ya que una transacción puede estar pasando cuando usted está haciendo eso, pero hay una api de copia de seguridad que utiliza la utilidad de línea de comandos

sqlite3 /path/to/live.db '.backup /backup/path.db'

para obtener una consistente captura de pantalla en los casos en los que usted no puede detener los procesos de hacer las actualizaciones.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X