Pregunta

Recientemente he leído esta Pregunta acerca de SQLite vs MySQL y la respuesta señaló que SQLite no escala bien y el sitio web oficial tipo-de lo confirma, sin embargo.

Cómo escalable es SQLite y cuáles son sus superiores la mayoría de los límites?

¿Fue útil?

Solución

Ayer publiqué un pequeño sitio* para el seguimiento de su representante que utiliza comparte una base de datos SQLite para todos los visitantes.Desafortunadamente, incluso con el modesto carga que se ponga en mi host se corrió muy lentamente.Esto es debido a que toda la base de datos fue bloqueado cada vez que alguien ve la página porque contenía actualizaciones/inserta.Pronto cambió a MySQL y aunque no he tenido mucho tiempo para probarlo, parece mucho más escalable que SQLite.Acabo de recordar lenta la carga de la página y, ocasionalmente, obteniendo una base de datos bloqueada error al intentar ejecutar consultas de la cáscara en sqlite.Dicho esto, me estoy corriendo a otro sitio de SQLite bien.La diferencia es que el sitio es estático (es decir,Yo soy el único que puede cambiar la base de datos), por lo que funciona bien para lecturas simultáneas.Moraleja de la historia:sólo el uso de SQLite para los sitios web donde las actualizaciones a la base de datos suceden muy raramente (menos a menudo que cada carga de página).

editar:Me di cuenta de que yo no haya sido justo SQLite - yo no, índice de las columnas en la base de datos SQLite cuando estaba sirviendo de una página web.Esta causado en parte la desaceleración que yo estaba experimentando.Sin embargo, la observación de la base de datos de bloqueo de levanta - si usted tiene particularmente onerosa actualizaciones, SQLite rendimiento no coincidir con MySQL o Postgres.

otra edición: Desde que he publicado esta casi 3 meses he tenido la oportunidad de examinar de cerca la escalabilidad de SQLite, y con un par de trucos que pueden ser muy escalable.Como he mencionado en mi primera edición, la base de datos de índices de reducir drásticamente el tiempo de consulta, pero esto es más de una observación general sobre las bases de datos que sobre SQLite.Sin embargo, hay otro truco que puede utilizar para acelerar SQLite: las transacciones.Siempre que usted tiene que hacer varias escrituras de base de datos, ponerlos dentro de una transacción.En lugar de escribir (y de cierre) en el archivo cada vez que una escritura consulta es emitida, la escritura sólo ocurrirá una vez cuando se complete la transacción.

El sitio que menciono he publicado en el primer párrafo de que se ha cambiado de nuevo a SQLite, y que está funcionando bastante bien una vez que me desconecté de mi código en un par de lugares.

* el sitio ya no está disponible

Otros consejos

Sqlite es escalable en términos de un solo usuario, tengo varios gigabytes de base de datos que funciona muy bien y yo no he tenido muchos problemas con ella.

Pero es de un solo usuario, por lo que depende de qué tipo de escala se está hablando.

En respuesta a los comentarios.Tenga en cuenta que no hay nada que impida el uso de una base de datos Sqlite en un entorno multi-usuario, pero cada una de las transacciones (en efecto, cada instrucción SQL que modifica la base de datos) se lleva a un bloqueo en el archivo, lo que evitará que otros usuarios tengan acceso a la base de datos en todos los.

Así que si usted tiene un montón de modificaciones hechas a la base de datos, básicamente va a golpear a los problemas de escalado muy rápido.Si, por otro lado, usted tiene un montón de acceso de lectura en comparación con acceso de escritura, podría no ser tan malo.

Pero Sqlite va de curso la función en un entorno multi-usuario, pero no realizar bien.

SQLite unidades de la sqlite.org sitio web y otros que tienen mucho tráfico.Ellos sugieren que si usted tiene menos de 100k visitas por día, SQLite debería funcionar bien.Y que fue escrito antes de que se entregó la "Writeahead de Registro" característica.

Si usted quiere acelerar las cosas con SQLite, haga lo siguiente:

  • actualizar a SQLite 3.7.x
  • Habilitar el registro de escritura anticipada
  • Ejecute el siguiente pragma:"PRAGMA cache_size = Número de páginas;" El tamaño predeterminado (Número de páginas) es de 2000 páginas, pero si se quiere elevar ese número, entonces usted va a aumentar la cantidad de datos que se ejecuta directamente de la memoria.

Puede que desee echar un vistazo a mi video en YouTube llamado "Mejorar SQLite Rendimiento Con Writeahead Registro"que muestra cómo utilizar el registro de escritura anticipada y demuestra una 5x mejora de la velocidad para la que escribe.

Sqlite es un escritorio o en el proceso de la base de datos.SQL Server, MySQL, Oracle, y sus hermanos son servidores.

Bases de datos de escritorio, por su naturaleza, no es una buena elección para los cualquier aplicación que necesita el soporte de grabación simultáneas de acceso a los datos de la tienda.Esto incluye, en algún nivel, la mayoría de los sitios web que se ha creado.Si usted aún tiene que iniciar sesión para nada, usted probablemente necesita acceso de escritura a la base de datos.

Tienen que leer este SQLite docs - http://www.sqlite.org/whentouse.html ?

SQLite generalmente será un gran trabajo como el motor de base de datos de bajo a medio el tráfico de los sitios web (es decir, El 99,9% de todos los sitios web).La cantidad de tráfico web que SQLite puede manejar depende, por supuesto, en el grado en que la sitio web utiliza su base de datos.En general hablando, cualquier sitio que recibe menos de 100K visitas/día debería funcionar bien con SQLite.El 100K visitas/día figura es una estimación conservadora, no es difícil de límite superior.SQLite ha sido demostrado para trabajar con 10 veces que cantidad de tráfico.

SQLite escalabilidad dependerá en gran medida de los datos utilizados, y su formato.He tenido un poco de experiencia dura, con extra largas mesas (GPS registros, un registro por segundo).La experiencia mostró que SQLite se ralentizará en etapas, en parte debido a la constante reequilibrio del crecimiento de árboles binarios celebración de los índices (y con marca de tiempo de los índices, que acaba de saber ese árbol se va a poner reajuste de mucho, sin embargo es de vital importancia para sus búsquedas).Así que al final en alrededor de 1GB (muy en el estadio, lo sé), las consultas se convierten lento en mi caso.Su kilometraje puede variar.

Una cosa para recordar, a pesar de la jactancia, SQLite NO está hecha para el almacenamiento de datos.Hay varios usos no se recomienda para SQLite.La multa a la gente detrás de SQLite dicen ellos mismos:

Otra manera de mirar SQLite es este:SQLite no está diseñado para reemplazar Oracle.Está diseñado para reemplazar a fopen().

Y esto nos lleva a la principal argumento (no cuantitativa, lo siento, pero cualitativos), SQLite no es para todos los usos, mientras que MySQL puede cubrir muchos y variados usos, incluso si no es lo ideal.Por ejemplo, usted podría tener MySQL para almacenar cookies de Firefox (en lugar de SQLite), pero sería necesario que el servicio se está ejecutando todo el tiempo.Por otro lado, usted podría tener un sitio web transaccional que se ejecutan en SQLite (como mucha gente) en lugar de MySQL, pero se espera que una gran cantidad de tiempo de inactividad.

creo que (en los números 1) servidor web que sirve hunderts de clientes aparece en el backend con una única conexión a la base de datos, ¿no?

Así que no hay acceso concurrente en la base de datos de un por lo tanto, podemos decir que la base de datos está trabajando en "modo de usuario único'.No tiene sentido diskuss acceso multi-usuario dicha circunstancia y así SQLite funciona tan bien como cualquier otro servidor-basado de la base de datos.

Pensar de esta manera.SQL Lite será bloqueado cada vez que alguien lo usa (SQLite no encaja en la lectura).Así que si tu sirviendo una página web o una aplicación que tiene múltiples usuarios concurrentes sólo uno puede usar la aplicación en un momento con SQLLite.Así que a la derecha hay un problema de escala.Si una persona en una aplicación de decir una Biblioteca de Música donde tienen cientos de títulos, calificaciones, información, uso de, juego, tiempo de juego, a continuación, SQL Lite escala bellamente la celebración de miles, si no millones de registros(unidad de disco Duro dispuestos)

MySQL por otro lado funciona bien para los servidores de aplicaciones, en donde la gente de todo va a usar al mismo tiempo.No bloqueo y es bastante grande en tamaño.Así que para su biblioteca de música de MySql sería largo de matar como solo una persona lo vea, a MENOS que esta es una biblioteca de música, donde miles de agregar o actualizar la misma.A continuación, MYSQL sería la de uso.

Así que en teoría MySQL escala mejor, a continuación, Sqllite causa puede manejar diversas de los usuarios, pero es demasiado para un solo usuario de la aplicación.

SQLite del sitio web (la parte que hace referencia) indica que puede ser utilizado para una variedad de multi-usuario situaciones.

Me atrevería a decir que puede aguantar bastante bien.En mi experiencia siempre ha sido muy rápido.Por supuesto, usted necesita para su índice de tablas y cuando la codificación en su contra, usted necesita para asegurarse de que el uso de parameritized consultas y demás.Básicamente, las mismas cosas que haría con cualquier base de datos para mejorar el rendimiento.

Podría ser digno de la comprobación hacia fuera REAL de SQL Server, que es un servidor de base de datos construida en SQLite.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top