Sitios web de uso interno: ¿hay un caso convincente contra SQLite?


23

Muchos marcos web, como Flask o Django, usan SQLite como su base de datos predeterminada. SQLite es convincente porque está incluido en python, y la sobrecarga administrativa es bastante baja.

Sin embargo, la mayoría de los sitios de producción pública de alto tráfico terminan usando una base de datos más pesada: mySQL, Oracle o postgresql.

Las preguntas :

Asumir:

  • El tráfico del sitio es moderado y se producirá acceso simultáneo de lectura / escritura a la base de datos
  • Usaremos SQLAlchemy con bloqueos de escritura SQLite (aunque este comentario me pone un poco nervioso)
  • La base de datos contendrá quizás 60,000 registros.
  • Las estructuras de datos no requieren características avanzadas que se encuentran en bases de datos más pesadas

¿Existe algún caso convincente contra la concurrencia de SQLite para sitios web que sirven como herramientas corporativas internas de tráfico moderado? Si es así, ¿qué condiciones harán que SQLite tenga problemas de concurrencia?

Estoy buscando causas raíz específicas conocidas, en lugar de miedo general / señalar con el dedo sin fundamento.


¿Cómo es sqllite con características como replicación, etc. que podrían ser útiles para copias de seguridad, etc.? En SQLlite tengo la impresión de que la aplicación posee el db. ¿Puedes ejecutar scripts de administrador, etc., mientras tu aplicación está activa?
Doug T.

1
Algunas anécdotas sobre SQLite y concurrencia (en su mayoría positivas): acceso concurrente sqlite3
Daniel B

1
En el caso de un sitio web interno, ¿cuál es la razón de peso de SQLite? ¿Alguna restricción para instalar un RDBMS?
JeffO

Aparte de simplificar el entorno de desarrollo en las computadoras portátiles de desarrolladores individuales, no hay una razón. La pregunta, por supuesto, es si podemos simplificar razonablemente el entorno de desarrollo y producción
Mike Pennington

Respuestas:


23

Recomiendo leer la respuesta oficial a su pregunta, Usos apropiados para SQLite . Específicamente, "Situaciones en las que otro RDBMS puede funcionar mejor" advierte que SQLite no admite la escritura concurrente:

SQLite admite una cantidad ilimitada de lectores simultáneos, pero solo permitirá un escritor en cualquier momento. Para muchas situaciones, esto no es un problema. Cada aplicación hace que su base de datos funcione rápidamente y avanza, y ningún bloqueo dura más de unas pocas docenas de milisegundos. Pero hay algunas aplicaciones que requieren más concurrencia, y esas aplicaciones pueden necesitar buscar una solución diferente.

Desde una perspectiva de adecuación, tiendo a ver SQLite como un formato de archivo muy sofisticado que admite consultas SQL. Tendería a evitar SQLite si quisiera separar mi base de datos de mi aplicación web, ya que no está optimizada para este caso. En resumen, SQLite es insuficientemente escalable para su uso en algunos escenarios, por lo que las personas que ejecutan sitios web que esperan algún día ser populares podrían comenzar mejor con algo escalable, en lugar de ir con SQLite y luego verse obligados a cambiar.

Dicho todo esto, SQLite probablemente esté bien para la mayoría de los sitios web internos; Por lo general, los sitios web internos no requieren el mismo nivel de concurrencia y escalabilidad.


Tampoco la mayoría de los sitios web externos. El motor de la base de datos puede intercambiarse si se usa algo como EF, aunque PostGres probablemente sería una mejor opción desde el principio.
Robert Harvey

@RobertHarvey ¿Qué es EF?
Mike Pennington

@MikePennington: Entity Framework. Me imagino que hay otros ORM que también tienen transparencia en la base de datos, o al menos pueden intercambiar los controladores.
Robert Harvey

1
El equivalente pitónico sería algo así como SQL Alchemy
Wyatt Barnett

"Tiendo a ver SQLite como un formato de archivo muy sofisticado que admite consultas SQL". Definición perfecta
Comodín el

4

Al ponerme el sombrero de Director de TI, veo algunos no-gos aquí:

  • Riesgo de corrupción de datos. Quizás más percibido que real, pero al final del día, este es un DB de tipo de archivo no transaccional que no tiene mucho o ningún recurso para malas escrituras además de preguntar si tiene una copia de seguridad reciente. Hablando de que . . .
  • ¿Cómo respaldo esto? En cierto modo, sé que tengo una buena copia. Preferiblemente sin desconectar la aplicación.
  • ¿Cómo puedo asegurar el acceso a la base de datos? Mi comprensión general es que SQL Lite no tiene ninguno fuera del acceso al sistema de archivos, que es un comienzo decente, pero no el principio absoluto. Especialmente para aplicaciones web donde es posible que desee más permisos graduados que DBA o nada.

Desde el punto de vista del desarrollador, creo que es importante saber por qué SqlLite es el predeterminado: es porque es fácil y se muestra bien. Si está "vendiendo" una plataforma a nuevos desarrolladores, es clave poder iniciar una aplicación web que funcione con un mínimo de alboroto. Y tener que ponerse de pie y configurar adecuadamente un servidor de base de datos sería un gran obstáculo para evitar.


1
Bueno, las copias de seguridad se pueden hacer a través de la API SQLite Backup . Reconoceré que SQLite podría no ser tan seguro por defecto, ya que, a diferencia de los sistemas orientados a servicios, los clientes SQLite hablan con el archivo de la base de datos más directamente. Dicho esto, SQLite usa un diario para proteger contra fallas del sistema, y ​​debe ser confiable si el sistema operativo host admite correctamente las primitivas de bloqueo que usa SQLite (la E / S de disco de red no lo hace). El sitio oficial enumera varios escenarios que conducirán a una base de datos SQLite corrupta.
Brian

SQLite es transaccional . Utilice la API de respaldo o adapte el script de respaldo de MediaWiki para realizar respaldos en línea. Su comprensión general del modelo de seguridad de SQLite es correcta. El consejo de seguridad oficial es 'use el sentido común': piense en cómo las personas podrían acceder a su archivo de base de datos y diseñe su aplicación web en consecuencia.
Iain Samuel McLean Élder

@Brian: sería difícil pensar en otra base de datos que tenga una página completa dedicada a "cómo se puede dañar esta base de datos". Agregaré que encuentro el proyecto sql lite increíble: probablemente tengan esa página porque son un poco locos y también tienen algo así como 10 líneas de código de prueba para cada línea de código de producción y realmente me gusta estar seguro y completo.
Wyatt Barnett
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.