¿Es buena idea tener una base de datos SQLite en la aplicación Flask similar a Trulia?

SQLite es una biblioteca en proceso que implementa un motor de base de datos SQL transaccional autónomo, sin servidor, de configuración cero. A diferencia de la mayoría de las otras bases de datos SQL, SQLite no tiene un proceso de servidor separado. SQLite lee y escribe directamente en archivos de disco normales. Una base de datos SQL completa con múltiples tablas, índices, disparadores y vistas está contenida en un solo archivo de disco. El formato de archivo de la base de datos es multiplataforma: puede copiar libremente una base de datos entre sistemas de 32 bits y 64 bits o entre arquitecturas big-endian y little-endian. Estas características hacen de SQLite una opción popular como formato de archivo de aplicación. Cuando vayas a usar SQLite como base de datos para tu aplicación Flask, entonces debes considerar algunas cosas:

  1. Es lento.
  • Bloquea todo el archivo para escribir.
  • Sin mecanismo de almacenamiento en caché propio.
  1. Es limitado
  • Tamaño de la base de datos restringido a 2GB en la mayoría de los casos.
  • No es totalmente compatible con SQL92.
  • No muy escalable.

Pero puedes superar estos problemas. ¿Cómo?

Para sitios web

SQLite funciona muy bien como motor de base de datos para la mayoría de los sitios web de tráfico bajo a medio (es decir, la mayoría de los sitios web). La cantidad de tráfico web que SQLite puede manejar depende de qué tanto el sitio web utiliza 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.

El sitio web de SQLite (https://www.sqlite.org/) usa el propio SQLite, por supuesto, y al momento de escribir este artículo (2015) maneja entre 400K y 500K solicitudes HTTP por día, de las cuales aproximadamente el 15-20% son dinámicas. páginas que tocan la base de datos. Cada página dinámica realiza aproximadamente 200 sentencias SQL. Esta configuración se ejecuta en una única VM que comparte un servidor físico con otros 23 y aún mantiene el promedio de carga por debajo de 0.1 la mayor parte del tiempo.

Para la base de datos del lado del servidor

Los diseñadores de sistemas informan de éxito utilizando SQLite como un almacén de datos en aplicaciones de servidor que se ejecutan en el centro de datos, o en otras palabras, utilizando SQLite como el motor de almacenamiento subyacente para un servidor de base de datos específico de la aplicación.

Con este patrón, el sistema general sigue siendo cliente / servidor: los clientes envían solicitudes al servidor y reciben respuestas a través de la red. Pero en lugar de enviar SQL genérico y recuperar el contenido de la tabla sin procesar, las solicitudes del cliente y las respuestas del servidor son de alto nivel y específicas de la aplicación. El servidor traduce las solicitudes en múltiples consultas SQL, reúne los resultados, realiza el procesamiento posterior, el filtrado y el análisis, luego construye una respuesta de alto nivel que contiene solo la información esencial.

Los desarrolladores informan que SQLite es a menudo más rápido que un motor de base de datos SQL de cliente / servidor en este escenario. El servidor serializa las solicitudes de la base de datos, por lo que la concurrencia no es un problema. La concurrencia también se mejora mediante el “fragmentación de la base de datos”: el uso de archivos de base de datos separados para diferentes subdominios. Por ejemplo, el servidor podría tener una base de datos SQLite separada para cada usuario, de modo que el servidor pueda manejar cientos o miles de conexiones simultáneas, pero cada base de datos SQLite solo es utilizada por una conexión.

Tomar decisiones

Entonces, podemos ver que podemos usar SQLite como base de datos para la aplicación Flask. Pero solo para aplicaciones pequeñas donde rara vez se necesita una base de datos. Si vas a desarrollar una aplicación mediana, entonces debes usar MySQL / MariaDB. Para aplicaciones grandes, como dijo Bill Karwin, puede usar una base de datos cliente / servidor como PostgreSQL permite que muchos clientes concurrentes.

Pero seguramente, puede usar SQLite como base de datos para fines de desarrollo. Luego puede pasar a cualquier base de datos que considere adecuada. Simplemente use Flask-SQLAlchemy para conectarse a la base de datos. Flask-SQLAlchemy es una extensión para Flask que agrega soporte para SQLAlchemy a su aplicación. Requiere SQLAlchemy 0.6 o superior. Su objetivo es simplificar el uso de SQLAlchemy con Flask proporcionando valores predeterminados útiles y ayudantes adicionales que facilitan la realización de tareas comunes.

Puede usar cualquier motor con Flask-SQLAlchemy. ¡Así que cálmate hermano!

Para fines de desarrollo, está bien usar la base de datos sqlite, que es lite weight y en la base de datos sql de memoria. pero de ninguna manera está desarrollado para uso en producción. Si planea implementar la aplicación, entonces debería considerar una base de datos seria como postgreSQL.

De lo contrario, tendrá que migrar su esquema db y los datos existentes a postgresql desde sqlite.

Mucha molestia en la producción. siga la base de datos estándar de producción desde el momento de la implementación.

Procedería con SQLite por el momento.

Siendo que está pensando que PostgreSQL puede ser una mejor opción en el futuro, pero actualmente no se siente cómodo al implementarlo, me limitaría a SQLite hasta que tenga un prototipo funcional y algo de tracción. Dado que ambas bases de datos se derivan del estándar SQL, debería poder portar todo a su debido tiempo.

En mi opinión, es mucho más importante llevar algo al mercado que intentar optimizarlo prematuramente en función del rendimiento. Puede acumular alguna deuda técnica, pero prefiero tener deuda técnica que no iniciarla.

SQLite no permite el acceso concurrente a la base de datos desde muchos hilos. Entonces, si su aplicación web va a ser utilizada por más de una persona a la vez, sus solicitudes web tendrían que hacer cola.

Una base de datos cliente / servidor como PostgreSQL permite muchos clientes concurrentes. Esto es probablemente lo que desea para una aplicación web, donde es posible que muchas solicitudes lleguen juntas, y necesitarán acceder a la base de datos en marcos de tiempo superpuestos.

SQLite es la base de datos más utilizada en el mundo. Sin embargo, generalmente no se usa para almacenar datos en una aplicación web como Trulia.

Se necesitaría una cantidad decente de código e infraestructura para poder utilizarlo en algo como Trulia. Definitivamente califica como una herramienta incorrecta para el trabajo. No esperaría que alguien que todavía está pasando por tutoriales sepa cómo empujar esta gran clavija redonda dentro del pequeño agujero cuadrado.

Dudo que muy poco del código utilizado para hacer que SQLite funcione sea reutilizable para una implementación de Postgres.

Sí. Sqlite puede manejar sus necesidades en aplicaciones de pequeña escala. 🙂

More Interesting

¿Alguien puede explicar claramente la diferencia entre la aplicación web y los sitios web?

¿Qué framework / pila de software es el mejor para desarrollar una aplicación web rápida y altamente receptiva compuesta por unas pocas pantallas de selecciones de menú desplegable?

¿Qué es centrado en API?

Cómo hacer que una aplicación web sea tan segura como Java hecha en PHP

¿Deberían los desarrolladores web que estudian JavaScript y sus marcos, Node.JS, aprender WebAssembly y ES6 independientemente de estos y cuál es la conexión de estos dos con los programas anteriores?

¿La construcción y el lanzamiento de aplicaciones exitosas lo hacen adecuado para un rol de gerente de producto en una empresa?

¿Cómo funcionan las aplicaciones basadas en web?

¿El reloj de Gulp usa encuestas o eventos reales?

Si construyo mi propia aplicación web compleja (Django) copiando y ajustando pequeños fragmentos de código tomados de 100 aplicaciones simples diferentes escritas por otras personas, ¿puedo considerarme un programador? ¿Por qué? Por qué no?

¿Costo contratar a un desarrollador Java / Spring para construir una aplicación web simple?

¿Qué son las aplicaciones web asincrónicas?

¿Cuáles son las mejores prácticas para aprender tecnologías web?

¿Esta configuración controlaría el Arduino de forma inalámbrica?

Cómo usar Django para construir una aplicación web de optimización

¿Cuál es una buena estrategia para competir con una aplicación web ya existente y popular que está dentro del mismo nicho y tiene el mismo propósito general?