2010-04-15 5 views
51

Tengo una pregunta relacionada con las bases de datos y en qué punto vale la pena sumergirse en una. Principalmente soy un ingeniero incrustado, pero estoy escribiendo una aplicación usando Qt para interactuar con nuestro controlador.¿En qué punto vale la pena usar una base de datos?

Nos encontramos en un punto extraño en el que tenemos datos suficientes para implementar una base de datos (alrededor de más de 700 elementos y en crecimiento) para administrar todo, pero no estoy seguro de que valga la pena con. No tengo problemas para implementar la GUI con archivos generados desde excel y analizados, pero es tedioso y difícil de rastrear incluso con scripts de VBA. He estado jugando con la conversión de nuestros datos en algo más manejable para el lado de la aplicación con Microsoft Access y que parece estar funcionando bien. Si eso funciona, estoy a solo un paso (o varios) de utilizar una base de datos SQL y usar la biblioteca Qt para acceder y modificarla.

No tengo mucha experiencia en la gestión de datos en este nivel y tengo curiosidad por saber cuál puede ser la mejor manera de abordar esto. Entonces, ¿cuáles son algunos de los beneficios reales de usar una base de datos si hay alguna en este caso? Me doy cuenta de que gran parte de esto puede ser muy específico de la aplicación, pero algunas ideas generales y sugerencias sobre cómo montar la línea de programación integrada/de la aplicación serían útiles.

No se trata de poner una base de datos en un proyecto incrustado. Tampoco es una aplicación de tipo comercial donde las bases de datos más grandes se usan comúnmente. Estoy diseñando una GUI para un solo usuario en un escritorio para interactuar con un microcontrolador con fines de monitoreo y configuración.


Decidí ir con SQLite. Puede hacer cosas muy interesantes con datos que realmente no consideré una opción cuando comencé este proyecto.

+21

Siempre había utilice una base de datos - el que usted quiere es, probablemente, SQLite en http://www.sqlite.org/. –

+0

¿Estás leyendo y escribiendo o simplemente leyendo los datos? –

+0

Hará lectura y escritura, utilizará la GUI para configurar y configurar el controlador, así como monitorear datos en tiempo real mientras el controlador está funcionando. – radix07

Respuesta

38

Una base de datos es que vale la pena cuando:

  1. Su aplicación evoluciona hasta cierto forma de ejecución de datos impulsadas.
  2. Su tiempo de gasto diseñando y desarrollando estructuras de almacenamiento de datos externos .
  3. El intercambio de datos entre aplicaciones o organizaciones (incluyendo individuales personas)
  4. los datos ya no es corta y sencilla .
  5. duplicación de datos

Evolución de ejecución de datos Driven
Cuando los datos está cambiando pero la ejecución no es así, esto es una señal de un programa impulsado por los datos o partes del programa son impulsados ​​datos. Un conjunto de opciones de configuración es un signo de una función impulsada por datos, pero toda la aplicación puede no estar impulsada por datos. En cualquier caso, una base de datos puede ayudar a administrar los datos. (La biblioteca o aplicación de la base de datos no tiene que ser enorme como Oracle, pero puede ser delgada y mala como SQLite).

& Diseño Desarrollo de Estructuras de Datos Externa
enviar preguntas a desbordamiento de pila sobre la serialización o árboles de conversión y listas para usar archivos es una buena indicación de su programa ha graduado a la utilización de una base de datos. Además, si está gastando cualquier cantidad de tiempo diseñando algoritmos para almacenar datos en un archivo o diseñando los datos en un archivo, es un buen momento para investigar el uso de una base de datos.

Compartir datos
sea que su aplicación está compartiendo datos con otra aplicación, otra organización u otra persona, una base de datos puede ayudar. Al usar una base de datos, la consistencia de los datos es más fácil de lograr. Uno de los grandes problemas en la investigación de problemas es que los equipos no usan los mismos datos. El cliente puede usar un conjunto de datos; el equipo de validación es otro y el desarrollo usa un conjunto diferente de datos. Una base de datos facilita el control de versiones de los datos y permite a las entidades utilizar los mismos datos.

datos complejos
programas comienzan a cabo utilizando pequeñas tablas de datos cifrados duros. Esto evoluciona hacia el uso de datos dinámicos con mapas, árboles y listas. En ocasiones, los datos se expanden de dos columnas simples a 8 o más. La base de datos y las bases de datos pueden aliviar la complejidad de organizar los datos. Deje que la base de datos se preocupe por la administración de los datos y libere su aplicación y su tiempo de desarrollo. Después de todo, la forma en que se manejan los datos no es tan importante como la calidad de los datos y su accesibilidad.

duplicación de datos
Muchas veces, cuando los datos crece, hay una atracción cada vez mayor de datos duplicados. Las bases de datos y la teoría de la base de datos pueden minimizar la duplicación de datos. Las bases de datos se pueden configurar para prevenir duplicaciones.

Ir al uso de una base de datos tiene muchos factores a considerar. Algunos incluyen, pero no están limitados a: complejidad de datos, duplicación de datos (incluidas partes de los datos), plazos del proyecto, costos de desarrollo y problemas de licencia. Si su programa puede ejecutarse de manera más eficiente con una base de datos, hágalo. Una base de datos también puede ahorrar tiempo de desarrollo (y dinero). Hay otras tareas que usted y su aplicación pueden realizar que administrar datos. Deje la administración de datos a los expertos.

+1

Ojalá pudiera preferir esta respuesta ... principalmente porque es muy general. No soy realmente un desarrollador, per se, pero puedo usar esta respuesta para ayudarme a entender cuando usar una base de datos sería una buena idea. Bien dicho. –

4

Te recomiendo que introduzcas una base de datos en tu aplicación, tu aplicación ganará flexibilidad y será más fácil de mantener y mejorar con nuevas características en el futuro.
Comenzaría con una base de datos basada en archivos livianos como Sqlite.
Con una bien diseñada db tendrá:

  1. redundancia de datos reducido
  2. mayor integridad de los datos
  3. seguridad de datos mejorada

Por último, pero no menos importante, el uso de una base de datos le ahorrará desde el Excel importación/actualización/exportación Hell!

2

Cuando tiene muchos datos que no está seguro de cómo serán explotados en el futuro.

Por ejemplo, es posible que desee agregar una base de datos SQLite en una aplicación incrustada que necesita registrar estadísticas que no está seguro de cómo se utilizarán. Más tarde envías la base de datos completa para la inyección en una más grande que se ejecuta en un servidor central y esos datos pueden explotarse fácilmente, utilizando solicitudes.

De hecho, si el propósito de su aplicación es "recopilar datos", entonces tener una base de datos es imprescindible.

+0

A veces es mejor volcar los datos simplemente y construir la base de datos en otro sistema que no tenga fuertes restricciones de tiempo. –

3

veo bastantes requisitos que bien atendidas por las bases de datos:

1). Consultas ad hoc. Encuéntreme todos los {X} que cumplan los criterios Y

2).Datos con estructura que pueden beneficiarse de la normalización: factorizar valores comunes en "tablas" separadas. Puede ahorrar espacio y reducir la posibilidad de inconsistencia de esta manera. Una vez que haya hecho esto, esas consultas ad-hoc comenzarán a ser realmente útiles.

3). Grandes volúmenes de datos. La base de datos profesional es muy buena para hacer un buen uso de las resorciones, las optmisations de consultas inteligentes y las estrategias de búsqueda. Tratar de escribir esto usted mismo es un verdadero desafío.

Claramente no necesita ese último, pero los otros dos, tal vez se aplican a usted.

3

Razones para utilizar una base de datos:

  • concurrente escribe. Es fácil lograr la concurrencia en las bases de datos
  • Consulta fácil. Las consultas SQL tienden a ser mucho más concisas que el código de procedimiento para buscar datos. ACTUALIZACIONES, INSERTAR INTO también puede hacer muchas cosas con muy poco código
  • Integridad. Las restricciones son muy fáciles de definir y se aplican sin escribir código. Si tiene una restricción no nula, puede estar seguro de que el valor no será nulo, no es necesario escribir cheques en ningún lado. Si tiene una restricción de clave externa en su lugar, no tendrá "referencias colgantes".
  • Rendimiento en grandes conjuntos de datos. La indexación es muy simple de añadir a una base de datos SQL

razones para no usar una base de datos:

  • Tiende a ser una dependencia adicional (aunque existen databases- muy ligero me gusta H2 para Java, por ejemplo)
  • Datos no adecuados para un esquema relacional. Cosas que son básicamente mapas clave/valor. XML (aunque las bases de datos suelen ser compatibles con XPath, etc.).
  • A veces los archivos son más convenientes. Pueden diferirse, combinarse, editarse con un editor de texto plano, etc. Algunas veces las hojas de cálculo pueden ser más prácticas (no es necesario crear un editor, puede usar un programa de hoja de cálculo)
  • Sus datos ya están en algún lugar else
+0

"ACTUALIZACIONES, INSERTAR INTO también puede hacer muchas cosas con muy poco código". Y GROUP BY es prácticamente absurdo, asumiendo que lo que sucede es lo que quieres :-) –

-2

"¿En qué punto vale la pena utilizar una base de datos?"

¿Cuándo y cuándo tienes que administrar los datos?

1

Para agregar un negativo: no es adecuado para el procesamiento en tiempo real, debido a la latencia no determinista. Sin embargo, sería bastante amplio buscar y establecer parámetros de operación, por ejemplo, durante el inicio. No pondría accesos a la base de datos en rutas de tiempo críticas.

1

No necesita una base de datos si tiene miles de filas en una o dos tablas para manejar en una sola aplicación de usuario (para el punto incrustado).

Si se trata de múltiples usuarios (acceso concurrente, bloqueo) o la necesidad de transacciones que definitivamente debe considerar una base de datos. Manejar estructuras de datos complejas en tablas normalizadas y mantener la integridad, o una gran cantidad de datos sería otra indicación de que debe usar una base de datos.

1

Parece que su aplicación se ejecuta en una computadora de escritorio y simplemente se comunica con el dispositivo incorporado.

Como tal, usar una base de datos es mucho más factible.Usar uno en una plataforma incrustada es un problema mucho más complejo.

En el escritorio utilizo una base de datos cuando existe la necesidad de almacenar nueva información continuamente y la necesidad de extraer esa información de una manera relacional. Lo que no uso bases de datos es almacenar información estática, información que leo una vez al cargar y eso es todo. La excepción es cuando la aplicación tiene muchos usuarios y existe la necesidad de almacenar esta información por usuario.

Me parece que es como recopilar información de su dispositivo incorporado, almacenarla de alguna manera y luego usarla más tarde para mostrarla a través de una GUI.

Este es un buen caso para usar una base de datos, especialmente si puede diseñar el sistema de modo que haya un daemon de recopilación de datos que administre la comunicación continua con el dispositivo incorporado. Esta aplicación puede simplemente escribir los datos en la base de datos. Cuando se inicia la GUI, puede extraer los datos para su visualización.

El uso de la base de datos también facilitará el desarrollo de su GUI si necesita visualizar diferentes vistas, como "muéstreme todas las entradas entre 2 fechas". Con una base de datos, simplemente solicite los valores correctos para mostrar con una consulta SQL adecuada y la GUI muestra lo que le devuelve, lo que le permite desacoplar gran parte del código de "lógica de negocios" de la GUI.

2

No olvide que la base de datos adecuada puede ser bastante diferente dependiendo de sus requisitos (y no olvide que un archivo de texto podría usarse como base de datos si sus requisitos son lo suficientemente simples; por ejemplo, archivos de configuración son solo un tipo específico de base de datos). Dichos parámetros pueden ser:

  • tamaño de los elementos de datos
  • necesita la base de datos

    • número de registros para ser compartido con otros dispositivos? ¿Al mismo tiempo?
    • cuán complejas son las relaciones entre los diversos datos
    • es la base de datos de solo lectura (creada en tiempo de compilación y no modificada, por ejemplo)?
    • ¿La base de datos debe ser actualizada por múltiples entidades al mismo tiempo?
    • ¿necesita admitir consultas complejas?

    Para una base de datos con 700 entradas, una matriz ordenada en memoria cargada desde un archivo de texto podría ser adecuada. Pero también podría ver la necesidad de una base de datos SQL incorporada o tal vez hacer que el controlador solicite datos de la base de datos a través de una conexión de red dependiendo de los diversos requisitos (y limitaciones de recursos).

  • 8

    Lo que está describiendo no suena como una aplicación comercial típica, y muchas de las respuestas ya publicadas aquí suponen que este es el tipo de aplicación de la que está hablando, así que permítame ofrecerle una perspectiva diferente.

    Si usa o no una base de datos para 700 elementos va a depender en gran medida de la naturaleza de los datos.

    diría que, alrededor del 90% del tiempo a esta escala, se beneficiará de una base de datos de poco peso como SQLite, siempre que:

    1. Los datos pueden potencialmente crecer sustancialmente mayor que lo usted está describiendo,
    2. los datos pueden ser compartidos por más de un usuario,
    3. Es posible que necesite para ejecutar consultas en los datos (que no creo que estás haciendo en este momento), y
    4. El datos pueden describirse fácilmente d en forma de tabla.

    El otro 10% de las veces, sus datos serán muy estructurado, jerárquico, a objetos basados, y no encaja perfectamente en el modelo de tabla de una base de datos o una tabla de Excel. Si este es el caso, considere usar archivos XML.

    Sé que los desarrolladores instintivamente les gusta lanzar bases de datos a problemas como este, pero si actualmente utiliza datos de Excel para diseñar interfaces de usuario (o mostrar configuraciones), en lugar de mostrar un registro de cliente, XML puede ser una mejor opción. XML es más expresivo que Excel o las tablas de bases de datos, y se puede manipular fácilmente con un editor de texto simple.

    Los analizadores XML y los enlazadores de datos para C++ son easy to find.

    1

    También nos enfrentamos a una situación similar. Tenemos un conjunto de datos provenientes de diferentes configuraciones de prueba y actualmente se está volcando en hojas de Excel, procesadas usando Perl o VBA.

    Nos encontramos con este método tenía muchos problemas:

    i. Administrar datos usando hojas de Excel es bastante engorroso. Después de un tiempo, tiene muchas hojas de Excel y no hay una manera fácil de recuperar los datos requeridos.

    ii. Las personas comienzan a enviar las hojas de Excel de un lado a otro para comentarios y revisión a través de correos electrónicos. El correo electrónico se convierte en el modo principal de administrar los comentarios relacionados con los datos. Estos comentarios se pierden en un momento posterior y no hay forma de recuperarlos.

    iii. Se crean varias copias de los archivos y los cambios en una copia no se reflejan en la otra; no hay versiones.

    Por las mismas razones, hemos decidido pasar a una solución basada en una base de datos y actualmente estamos trabajando en ello. Permítanme resúmenes de lo que estamos tratando de hacer:

    i. La base de datos se encuentra en un servidor central accesible para PC en todas las configuraciones de prueba.

    ii. Todos los datos entran en una ubicación temporal (disco duro local en los archivos) tan pronto como se generan. A partir de los archivos, es llevado a la base de datos por un proceso que se ejecuta en segundo plano (por lo que incluso si hay un problema de red, los datos estarán presentes en el sistema de archivos local).

    iii.Tenemos una aplicación basada en la web que permite a los usuarios iniciar sesión y acceder a los datos en el formato que deseen. El portal les permitirá agregar comentarios, generar diferentes tipos de informes, compartirlos con otros usuarios después de la revisión, etc. También tendrá la capacidad de exportar datos a la hoja de Excel, en caso de que necesite llevarlos con usted.

    Vamos a saber si esto puede aplicarse mejor.

    2

    no hay un punto específico en el que una base de datos es que vale la pena. En su lugar, suelo formular las siguientes preguntas:

    • ¿La cantidad de datos que la aplicación utiliza/crea crece?
    • ¿El límite superior de este crecimiento de datos es desconocido (o no está claro)?
    • ¿La aplicación necesitará agregar o filtrar esta información?
    • ¿Podría haber usos futuros de los datos que pueden no ser obvios en este momento?
    • ¿Es importante el rendimiento de la recuperación o el almacenamiento de datos?
    • ¿Hay (o puede haber) múltiples usuarios de la aplicación que comparten datos?

    Si respondo 'Sí' a la mayoría de estas preguntas, casi siempre elijo una base de datos (a diferencia de otras opciones como XML/ini/CSV/Excel/archivos de texto o el sistema de archivos).

    Además, si la aplicación tendrá muchos usuarios que podrían estar accediendo a los datos al mismo tiempo, voy a inclinarse hacia un servidor de base de datos completa (MySQL, SQL Server, Oracle, etc).

    Pero a menudo en un solo usuario (o pequeña concurrencia) situación, una base de datos local, como SQLite no tiene parangón para la portabilidad y facilidad de despliegue.