Recientemente leí esta pregunta sobre SQLite vs MySQL y la respuesta señaló que SQLite no escala bien y el sitio web oficial confirma esto , sin embargo.
¿Cuán escalable es SQLite y cuáles son sus límites superiores?
Recientemente leí esta pregunta sobre SQLite vs MySQL y la respuesta señaló que SQLite no escala bien y el sitio web oficial confirma esto , sin embargo.
¿Cuán escalable es SQLite y cuáles son sus límites superiores?
Respuestas:
Ayer lancé un sitio pequeño *para rastrear a su representante que utilizó una base de datos SQLite compartida para todos los visitantes. Desafortunadamente, incluso con la modesta carga que ejerció sobre mi host, funcionó bastante lentamente. Esto se debe a que toda la base de datos se bloqueó cada vez que alguien vio la página porque contenía actualizaciones / inserciones. Pronto cambié a MySQL y aunque no he tenido mucho tiempo para probarlo, parece mucho más escalable que SQLite. Solo recuerdo cargas lentas de página y ocasionalmente un error de base de datos bloqueada cuando intento ejecutar consultas desde el shell en sqlite. Dicho esto, estoy ejecutando otro sitio desde SQLite muy bien. La diferencia es que el sitio es estático (es decir, yo soy el único que puede cambiar la base de datos) y, por lo tanto, funciona bien para lecturas concurrentes. Moraleja de la historia:
editar : Acabo de darme cuenta de que puede que no haya sido justo con SQLite: no indicé ninguna columna en la base de datos SQLite cuando la estaba sirviendo desde una página web. Esto causó parcialmente la desaceleración que estaba experimentando. Sin embargo, la observación de los soportes de bloqueo de la base de datos: si tiene actualizaciones particularmente onerosas, el rendimiento de SQLite no coincidirá con MySQL o Postgres.
Otra edición: desde que publiqué esto hace casi 3 meses, tuve la oportunidad de examinar de cerca la escalabilidad de SQLite, y con algunos trucos puede ser bastante escalable. Como mencioné en mi primera edición, los índices de la base de datos reducen drásticamente el tiempo de consulta, pero esto es más una observación general sobre las bases de datos que sobre SQLite. Sin embargo, hay otro truco que puede usar para acelerar SQLite: las transacciones . Siempre que tenga que hacer múltiples escrituras de bases de datos, colóquelas dentro de una transacción. En lugar de escribir (y bloquear) el archivo cada vez que se emite una consulta de escritura, la escritura solo ocurrirá una vez que se complete la transacción.
El sitio que mencioné que publiqué en el primer párrafo se ha cambiado nuevamente a SQLite, y está funcionando sin problemas una vez que ajusté mi código en algunos lugares.
* el sitio ya no está disponible
Sqlite es escalable en términos de usuario único, tengo una base de datos de varios gigabytes que funciona muy bien y no he tenido muchos problemas con ella.
Pero es de un solo usuario, por lo que depende de qué tipo de escala 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 multiusuario, pero cada transacción (en efecto, cada instrucción SQL que modifica la base de datos) bloquea el archivo , lo que evitará que otros usuarios accedan a la base de datos en todos .
Entonces, si tiene muchas modificaciones realizadas en la base de datos, esencialmente tendrá problemas de escala muy rápido. Si, por otro lado, tiene mucho acceso de lectura en comparación con el acceso de escritura, puede que no sea tan malo.
Pero Sqlite, por supuesto, funcionará en un entorno multiusuario, pero no funcionará bien.
SQLite maneja el sitio web sqlite.org y otros que tienen mucho tráfico. Sugieren que si tiene menos de 100k visitas por día, SQLite debería funcionar bien. Y eso fue escrito antes de que entregaran la función "Registro de escritura anticipada".
Si desea acelerar las cosas con SQLite, haga lo siguiente:
Es posible que desee ver mi video en YouTube llamado " Mejorar el rendimiento de SQLite con el registro de escritura anticipada ", que muestra cómo utilizar el registro de escritura anticipada y demuestra una mejora de velocidad 5x para las escrituras.
Sqlite es una base de datos de escritorio o en proceso . SQL Server, MySQL, Oracle y sus hermanos son servidores .
Las bases de datos de escritorio no son, por su propia naturaleza, una buena opción para ninguna aplicación que necesite admitir el acceso de escritura concurrente al almacén de datos. Esto incluye en algún nivel la mayoría de los sitios web creados. Si incluso tiene que iniciar sesión para algo, probablemente necesite acceso de escritura a la base de datos.
¿Has leído estos documentos de SQLite: http://www.sqlite.org/whentouse.html ?
SQLite generalmente funcionará muy bien como motor de base de datos para sitios web de tráfico bajo a medio (es decir, el 99.9% de todos los sitios web). La cantidad de tráfico web que SQLite puede manejar depende, por supuesto, de cuán fuertemente el sitio web use su base de datos. En términos generales, cualquier sitio que obtenga menos de 100K visitas / día debería funcionar bien con SQLite. La cifra de 100K visitas / día es una estimación conservadora, no un límite superior difícil. Se ha demostrado que SQLite funciona con 10 veces esa cantidad de tráfico.
La escalabilidad de SQLite dependerá en gran medida de los datos utilizados y su formato. He tenido una experiencia difícil con tablas extra largas (registros GPS, un registro por segundo). La experiencia demostró que SQLite se ralentizaría por etapas, en parte debido al reequilibrio constante de los árboles binarios en crecimiento que contienen los índices (y con los índices con marca de tiempo, solo sabe que el árbol se reequilibrará mucho, pero es vital para su búsquedas). Entonces, al final, alrededor de 1 GB (muy amplio, lo sé), las consultas se vuelven lentas en mi caso. Su kilometraje variará.
Una cosa para recordar, a pesar de toda la jactancia, SQLite NO está hecho para el almacenamiento de datos. Hay varios usos no recomendados para SQLite. Las buenas personas detrás de SQLite lo dicen ellos mismos:
Otra forma de ver SQLite es esta: SQLite no está diseñado para reemplazar a Oracle. Está diseñado para reemplazar fopen ().
Y esto lleva al argumento principal (no cuantitativo, lo siento, pero cualitativo), SQLite no es para todos los usos, mientras que MySQL puede cubrir muchos usos variados, incluso si no es ideal. Por ejemplo, podría tener MySQL almacenar cookies de Firefox (en lugar de SQLite), pero necesitaría que ese servicio se ejecute todo el tiempo. Por otro lado, podría tener un sitio web transaccional ejecutándose en SQLite (como lo hace mucha gente) en lugar de MySQL, pero espera mucho tiempo de inactividad.
ATTACH DATABASE
para crear una conexión de base de datos virtual con todas las tablas (sin embargo, limitado a 62 bases de datos).
Creo que un servidor web (en el número 1) que sirve a cientos de clientes aparece en el backend con una única conexión a la base de datos, ¿no?
Por lo tanto, no hay acceso concurrente en la base de datos y, por lo tanto, podemos decir que la base de datos funciona en 'modo de usuario único'. No tiene sentido acceder a múltiples usuarios de diskuss en tales circunstancias, por lo que SQLite funciona tan bien como cualquier otra base de datos basada en servidor.
Piénsalo de esta manera. SQL Lite se bloqueará cada vez que alguien lo use (SQLite no bloquea la lectura). Entonces, si está sirviendo una página web o una aplicación que tiene múltiples usuarios concurrentes, solo uno podría usar su aplicación a la vez con SQLLite. Entonces, hay un problema de escala. Si se trata de una aplicación para una sola persona, por ejemplo, una Biblioteca de música en la que tienes cientos de títulos, clasificaciones, información, uso, reproducción y tiempo de reproducción, entonces SQL Lite escalará maravillosamente con miles, si no millones, de discos (si el disco duro lo permite)
MySQL, por otro lado, funciona bien para aplicaciones de servidores donde la gente de todo el mundo lo usará simultáneamente. No se bloquea y es bastante grande en tamaño. Entonces, para su biblioteca de música, MySql se acabaría como solo una persona lo vería, A MENOS QUE sea una biblioteca de música compartida donde miles la agregan o actualizan. Entonces MYSQL sería el que usaría.
Entonces, en teoría, MySQL escala mejor que Sqllite porque puede manejar múltiples usuarios, pero es excesivo para una aplicación de usuario único.
El sitio web de SQLite (la parte a la que hizo referencia) indica que se puede usar para una variedad de situaciones multiusuario.
Yo diría que puede manejar bastante. En mi experiencia, siempre ha sido muy rápido. Por supuesto, debe indexar sus tablas y al codificarlas, debe asegurarse de usar consultas parameritizadas y similares. Básicamente, lo mismo que haría con cualquier base de datos para mejorar el rendimiento.
Puede valer la pena echarle un vistazo a REAL SQL Server , que es un servidor de base de datos construido en SQLite.