¿Cuál es la mejor manera de determinar cuándo es apropiado usar una base de datos?

13

Comencé mi carrera de programación en desarrollo web usando PHP y MySQL. Me acostumbré bastante a utilizar db para el almacenamiento de la mayoría de los datos dinámicos, así como algunos datos de configuración / parámetros. Algunas veces habría muchos datos, mientras que otras veces las entradas en las tablas serían pocas. Para mí, esto parecía natural y, hasta donde yo sé, este es un enfoque más o menos aceptable en el desarrollo web. (Por favor corrígeme si estoy equivocado...)

Ahora estoy profundizando en las aplicaciones de escritorio y mi inclinación natural es utilizar nuevamente una base de datos para almacenar una gran cantidad de información que se generará a través del uso de la aplicación. Sin embargo, por lo que puedo decir, no veo aplicaciones (que uso) que utilicen un db muy a menudo. [EDITAR: desde entonces se ha señalado que esta fue una suposición errónea en el sentido de que muchas aplicaciones usan dbs ligeros integrados en el programa mismo.] ¿Cuál es la razón de esto? ¿En qué punto es apropiado utilizar un db? ¿Hay alguna norma sobre este asunto? Además, ¿cuáles son las razones para NO usar un db para desarrollar una aplicación de escritorio?

Kenneth
fuente
2
"Sin embargo, por lo que puedo decir, no veo aplicaciones (que uso) que utilizan un db muy a menudo"? ¿Basado en que? Si usaran SQLite, ¿cómo podría saber si estaban o no usando una base de datos?
S.Lott
Por eso dije que, por lo que puedo ver, sabía que había una posibilidad de que estaba equivocado. Pensé que podría haber algunas aplicaciones que usan db integrados ... ¿Es bastante común que las aplicaciones usen dbs?
Kenneth
@Kenneth: Google para bases de datos incrustadas como SQLite. Hay muchos. Son ampliamente utilizados. AFAIK, el iOS de Apple lo usa para toda persistencia. Por favor google.
S.Lott
2
Yo Google mucho. A veces, aunque nada reemplaza las opiniones experimentadas que no siempre puedes encontrar buscando en Google.
Kenneth
1
Creo que estos comentarios son suficientes para corregir la suposición errónea. Pido disculpas por el error. Siento que uso una combinación saludable de googlear y hacer preguntas. A veces no hay sustituto para este último en mi humilde opinión. Ahora mi google estará mejor dirigido y será más productivo.
Kenneth

Respuestas:

4

si su aplicación está orientada a documentos, almacene cosas en un archivo de documento

Si su aplicación trata con datos más estructurados, demasiado para un solo documento (como un documento XML), use una base de datos

Steven A. Lowe
fuente
7

Tradicionalmente, un sistema de base de datos ha sido visto como un servicio relativamente pesado, que no necesariamente quería instalar en cada máquina cliente. De hecho, he estado en situaciones (desarrollo de aplicaciones GUI de escritorio en las que se necesitaban guardar muchos datos) en las que un sistema de base de datos real habría sido una solución "ideal", pero porque en el pasado las únicas bases de datos disponibles eran relativamente pesadas, fuimos con archivos de datos planos en su lugar.

A pesar de que actualmente existen algunas bases de datos más livianas, este sigue siendo un argumento válido contra las bases de datos del lado del cliente. Imagine una pequeña aplicación de escritorio simple (como, por ejemplo, un juguete o juego de escritorio simple) que tiene que almacenar algunas docenas de configuraciones y parámetros. Parece exagerado hacer que una persona instale MySQL solo para ejecutar su aplicación.

Con el desarrollo web, el servidor es naturalmente un back-end, donde tener una base de datos es parte del curso. p.ej. Los usuarios no tienen que preocuparse por instalar una base de datos al final.

Mesas Bobby
fuente
Entonces, ¿recomendaría no utilizar una base de datos para aplicaciones independientes, a menos que realmente lo justifiquen grandes volúmenes de datos?
Kenneth
¿Qué piensas sobre el uso de bases de datos livianas ... igual que las bases de datos a gran escala?
Kenneth
1
@Kenneth: Yo diría "depende". Si la aplicación requiere grandes volúmenes de datos tabulares que realmente requieren estar en una base de datos adecuada, entonces el argumento podría ser lo suficientemente fuerte como para enviar la aplicación con una base de datos liviana. Pero si solo se trata de datos de configuración / configuración, entonces probablemente sea exagerado.
Bobby Tables
5

Las aplicaciones de escritorio mantienen el estado mientras se ejecutan. Mientras que el desarrollo web generalmente no lo hace. Entonces, si bien es posible que deba almacenar una configuración de usuario en una base de datos entre cargas de página, en una aplicación de escritorio simplemente las guarda en la memoria. Eso reduce en gran medida la necesidad de este tipo de almacenamiento persistente. Cuando desee almacenar preferencias entre usos, puede guardarlos en un solo archivo o colocarlos en algún lugar como el registro de Windows.

Dicho esto, los sistemas de bases de datos se usan bastante en aplicaciones de escritorio. Mucho antes de la web, las aplicaciones de escritorio se habían conectado a DBMS. Principalmente para aplicaciones que no están basadas en documentos. Aunque en estos días, con la mejor disponibilidad de motores livianos, estás viendo las líneas un poco borrosas. Por ejemplo, utilizo bases de datos SQLite como documentos en algunas de mis aplicaciones.

Gran maestro B
fuente
+1 Si no tiene problemas de persistencia complejos, como actualizaciones de bloqueo simultáneas multiusuario y multiusuario, una base de datos tradicional podría ser exagerada. Si los datos en cuestión son bastante estáticos (pueden crecer o agregarse a ellos, pero no evolucionan ni se actualizan), y la contienda / competencia no es frecuente o perversa (efectos secundarios / experiencia del usuario por esperar en un bloqueo para liberar no es inaceptable teniendo en cuenta las compensaciones de rendimiento y complejidad), es posible que no necesite una base de datos.
JustinC
4

Una cosa que quizás desee considerar son las bases de datos livianas que no requieren un servicio de base de datos en ejecución real. por ejemplo, en el frente de Microsoft está SQL Server Compact , que es gratuito, solo requiere un único archivo para la base de datos y algunas DLL agregadas a su aplicación, y desde la perspectiva del desarrollador, se comporta de la misma manera que un SQL Server "real".

Estoy seguro de que hay opciones similares en otras plataformas.

Carson63000
fuente
1
Un ejemplo muy similar en el lado de Java es Derby. Creo que también hay otros.
jprete
1
Parece que podría ser una solución ideal ... ¡Realmente disfruto utilizando db's! jajaja
Kenneth
¿Hay desventajas al usar db's livianos?
Kenneth
@Kenneth: Amplían su instalación y pueden aumentar la base de código. Pero eso es mucho menos que instalar un servidor de base de datos completo en un cliente, eso generalmente se hace cuando la aplicación se distribuye y necesita una base de datos más sustancial. El Berkeley DB es uno de los más utilizados.
Orbling
Otra opción es SQLite, que es mucho más ligero tanto en RAM como en espacio en disco, y no tiene limitaciones arbitrarias. No es de extrañar que sea utilizado por todos los teléfonos inteligentes y navegadores web que no sean MS.
Javier
2

En las aplicaciones web, es importante almacenar cualquier estado persistente en un almacenamiento centralizado. Dado que la aplicación web suele ser el primer cuello de botella, es importante poder distribuirla sin tener que cuestionar qué copia tiene los datos (el principio de 'Nada Compartido'). No solo una base de datos, sino que los memcachedsistemas de colas están ahí por la misma razón.

Las aplicaciones de escritorio no tienen el mismo objetivo de escalabilidad. Por lo general, la mayoría de los datos se almacenan localmente en cada estación de trabajo. El intercambio de datos es un problema diferente en la mayoría de los casos. Eso elimina una gran razón para usar una base de datos.

Las aplicaciones GUI también pueden tener documentos complejos que podrían manejarse como una red compleja de objetos en la memoria. La normalización de la estructura en un esquema de base de datos relacional puede agregar una complejidad significativa al problema, a veces es más fácil simplemente serializar todo en una sola prueba. Muchos marcos de OOP incluyen algunas instalaciones solo para eso.

Aún así, hacer que los documentos almacenados sean legibles con herramientas fuera de la aplicación principal es una gran ventaja en muchos casos, por lo que usar formatos legibles por humanos (XML, JSON, YAML, etc.) o un archivo zip que amalgama varias piezas más simples es cada vez más fácil. más común.

En el mismo sentido, el uso de una biblioteca de base de datos incorporable (BDB, Tokyo Cabinet, SQLite, MS-SQL * server Compact, etc.) es otro gran enfoque.

Javier
fuente
1

Las bases de datos pueden ser excesivas, pero generalmente no tienen que serlo. Los programas muy simples simplemente no los necesitan. Si su documento puede cargarse en la memoria en un tiempo trivial y permanecer allí sin problemas, realmente no necesita uno para muchos programas.

Por ejemplo, considere:

#include "superheader.h"

int main()
{
    int row=2, column=2;
    DatabaseType db;
    db.ConnectTo("programDB", "user", "pass");
    db.setTable("messages");
    string hello_world=db.fetch(row, column);
    cout<<hello_world;
    return 0;
}

Bueno, eso es demasiado simplista, pero obviamente esto es demasiado. No tiene sentido tener ese nivel de gestión de datos para "Hello World"

Por lo general, la regla general que sigo es usar una base de datos si tiene muchos conjuntos de datos, especialmente si son únicos o usar una base de datos si la cantidad de datos es bastante masiva. Las bases de datos en general están asociadas con algunos gastos generales, pero hay muchos que realmente no tienen mucho. Las bases de datos pequeñas, livianas y en memoria, por ejemplo, a veces son útiles para proyectos pequeños con procesamiento pesado, programación o muchos cambios dinámicos en los datos.

Hay diferentes estilos de codificación, muchas veces no hay nada de malo en una base de datos, pero la mayoría de nosotros simplemente no iremos tan lejos para las tareas básicas. Todavía hay otras ocasiones en que la base de datos correcta ofrecería beneficios de rendimiento. Intente comprender especialmente las diferencias en dónde estarán los datos, cuánto tiempo estarán allí y qué los cambiará durante su vida útil.

Garet Claborn
fuente
1

Usar un db siempre es lo correcto y con las implementaciones de SQLite para prácticamente todos los idiomas que no se usan, solo se toma una mala decisión de diseño. La única razón para no usar uno es si está haciendo programación incrustada o algún otro tipo de programación sin aplicación. Consultar datos y configuraciones con un lenguaje declarativo como SQL es mucho más natural que atravesar archivos planos u otros objetos en la memoria con una sintaxis imperativa. Además, separa limpiamente las operaciones de datos de otro código de aplicación que a la larga hace que el código sea más modular y fácil de mantener.

davidk01
fuente