¿Cuándo debe preferirse el uso de la base de datos sobre el análisis de datos de un archivo de texto?

13

Estaba haciendo un programa de Python para medir el crecimiento de codereview.SE . Mi enfoque era obtener las "Estadísticas del sitio" que se muestran en la página principal y almacenarlas en mi disco duro. Planeo hacer esto una vez al día. Hasta ahora he hecho lo suficiente para obtener las estadísticas y agregarlas a un archivo de texto. El script de python se puede ver en github . El formato que estoy usando es el siguiente

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

Acabo de ejecutar el script dos veces para obtener el formato que usaría en el archivo. Inicialmente, esto me pareció bueno porque lo estaría almacenando yo mismo y el formato sería el mismo, por lo que sería fácil de analizar, pero no estoy seguro. Parece que usar una base de datos debería ser mejor aquí porque de esa manera recuperar datos debería ser más fácil. Solo una nota, nunca he usado ninguna base de datos y no tengo conocimiento de SQL, MySQL ni ninguna otra variante de RDBMS.

Entonces esto me lleva a la pregunta. ¿Cuándo se debe preferir una base de datos para almacenar los datos en lugar de almacenarlos en un archivo de texto? ¿Hay algunos indicadores que pueda buscar al tomar decisiones sobre si necesito una base de datos o archivos de texto simples?

PD: Si se pueden agregar mejores etiquetas, hágalo. Tenía algunas dudas sobre las etiquetas que podrían agregarse.

Aseem Bansal
fuente
"Cada herramienta es una responsabilidad hasta que aprenda a usarla".
JeffO
1
Una base de datos puede o no ser apropiada para su proyecto. Sin embargo, es posible que encuentre útil usar un formato más simple. Hay un módulo CSV que es estándar con Python que podría considerar usar. Tener un CSV simplificaría la exportación de los datos a otros programas (por ejemplo, a una hoja de cálculo para que pueda graficarlos).
Sean McSomething

Respuestas:

13

¿Cuándo se debe preferir una base de datos para almacenar los datos en lugar de almacenarlos en un archivo de texto?

Wikipedia nos dice que una base de datos es una colección organizada de datos . Según esa medida, su archivo de texto es una base de datos. Continúa diciendo:

Los datos generalmente se organizan para modelar aspectos relevantes de la realidad de una manera que respalde los procesos que requieren esta información. Por ejemplo, modelar la disponibilidad de habitaciones en hoteles de una manera que permita encontrar un hotel con vacantes.

Esa parte es subjetiva: no nos dice específicamente cómo deben modelarse los datos o qué operaciones deben optimizarse. Su archivo de texto consta de varios registros distintos, uno para cada día, por lo que está modelando un aspecto de la realidad de una manera que sea relevante para su problema.

Me doy cuenta de que cuando dices "base de datos" probablemente estés pensando en algún tipo de sistema de administración de bases de datos relacionales, pero pensar en tu archivo de texto como una base de datos cambia tu pregunta de "¿cuándo debo usar una base de datos?" a "¿qué tipo de base de datos debo usar?" Ver las cosas de esa manera hace que la respuesta sea más fácil de ver: use una mejor base de datos cuando la que ya no cumpla con sus requisitos.

Si su script Python y su archivo de texto simple funcionan lo suficientemente bien, no hay necesidad de cambiarlos. Con solo un nuevo registro por día y las computadoras cada vez más rápidas cada año, sospecho que su solución actual podría ser viable durante mucho tiempo. El valor de una década de datos le daría solo 3650 registros que, una vez analizados, probablemente requerirían menos de 75 kilobytes.

Imagine que en lugar de un pequeño registro por día, decidió registrar cada pregunta formulada en CodeReview, quién la hizo y cuándo. Además, también recopila todas las respuestas y los metadatos relevantes. Usted podría almacenar todos los que en un archivo de texto, pero un archivo plano, sería difícil encontrar información cuando lo necesitas. Habría demasiados datos para leer todo en la memoria, por lo que cada vez que quisiera encontrar una pregunta o respuesta, tendría que escanear el archivo hasta encontrar lo que estaba buscando. Cuando deseaba encontrar todas las preguntas formuladas por un usuario determinado, tendría que escanear todo el archivo. Si desea encontrar todas las preguntas que tienen "errores" como etiqueta, tendría que escanear el archivo.

Eso sería terriblemente lento, por lo que puede decidir acelerar las cosas creando algunos índices que le indiquen dónde buscar en el archivo para encontrar un registro dado. Podría tener un índice para preguntas, otro para usuarios, un tercero para respuestas, etc. Cuando quisiera encontrar una pregunta, buscaría en el índice de preguntas (mucho más pequeño), obtendría la posición de la pregunta en el archivo de datos principal y saltaría rápidamente al lugar correcto en el archivo. Esa sería una gran mejora en el rendimiento. De hecho, eso es más o menos lo que es un sistema de gestión de bases de datos.

Por lo tanto, use un DBMS cuando sea lo que necesita. Úselo cuando tenga muchos datos, cuando necesite poder acceder a esos datos rápidamente y tal vez de una manera que no pueda predecir por completo desde el principio. Si tiene diferentes tipos de datos, diferentes tipos de registros, que están conectados entre sí, use un RDBMS para que pueda relacionar los diversos registros de manera adecuada.

Caleb
fuente
3
"pensar en su archivo de texto como una base de datos cambia" Muy perspicaz. También fue útil la parte sobre mí que solo tenía 3650 entradas. Ayudó a tener una perspectiva real del problema.
Aseem Bansal
1
Respuesta altamente subestimada, esta es la segunda vez que vuelvo a ella.
Hashim
6

Bases de datos tienen muchas ventajas, pero haciendo que el acceso más fácil , no es uno de ellos. Más rápido, más estandarizado, interpretable como un sublenguaje de comando incorporado, más seguro, sí, pero no más fácil. No importa cuánto azúcar sintáctico proporcione su idioma y su biblioteca estándar, debe tener una base de datos en primer lugar, abrir una conexión y enrutar datos desde su programa, algo completamente diferente y viceversa. Mientras no haya problemas con lo que hace, y su prioridad sea la facilidad de programación, nunca cambie a una base de datos solo porque piense que es una "buena práctica".

Mi opinión sobre cuándo hacer el cambio es seguir el desarrollo histórico. Después de todo, las personas almacenaron datos en archivos durante mucho tiempo antes de que se inventara la base de datos relacional, y de hecho se inventaron un montón de modelos de bases de datos inferiores (base de datos jerárquica, base de datos de red ...) antes de eso. Comenzaron a escribir bases de datos y las usaron cuando quedó claro que esto ahorraría un gran esfuerzo de procesamiento, aumentaría la confiabilidad, etc. en general y a largo plazo . Mientras ese no sea el caso para usted, y no prevea que se convierta en el caso en el corto plazo, el cambio sería una ingeniería excesiva.

Kilian Foth
fuente
¿No se ofrece mejor la cohesión según el diseño general? Por ejemplo, en mi caso estoy almacenando 5 valores correspondientes a cada fecha. En el estado actual no hay ninguna cohesión entre los datos.
Aseem Bansal
Tiene razón, asegurarse de que todos los registros tengan un conjunto consistente de campos y valores es otra de estas ventajas. (Estrictamente hablando, solo las bases de datos relacionales lo garantizan. La gente usó bases de datos no relacionales en producción durante mucho tiempo, y actualmente están volviendo a ganar fuerza con el movimiento "NoSQL".)
Kilian Foth,
3

Esto, por supuesto, será una decisión, pero los tres criterios principales que consideraría son: ¿debe ser compatible con ACID , qué tan complejos son los datos y, finalmente, cuántas cosas necesitan leer / escribir? Siempre y cuando simplemente esté leyendo y escribiendo una línea por línea y su aplicación sea la única que esté leyendo o escribiendo, probablemente pueda omitir la base de datos. Una vez que comienzas a tener múltiples aplicaciones, ya sea leyendo o escribiendo, o tu estructura de datos se vuelve compleja (particularmente si tiene relaciones entre líneas separadas), un DB comienza a verse realmente atractivo.

jmoreno
fuente
"cuántas cosas necesitan leerlo / escribirlo" - Eso ayudó.
Aseem Bansal
2

Las bases de datos se utilizan no solo para almacenar, sino también para manipular y consultar datos, por lo tanto, deberá tomar una decisión informada:

Un factor importante es el beneficio que obtiene al instalar una base de datos en la máquina frente a la funcionalidad que brinda

Obviamente, si necesita consultar y manipular los datos, y desea que el acceso sea rápido, y además podría estar pensando en usar una base de datos para otras funciones, entonces podría ser una buena idea. Los modelos de almacenamiento de bases de datos permiten buscar datos por valores clave muy rápidamente, y me imagino que analizar un archivo podría ser lento (dependiendo de cómo lo esté haciendo)

Si quiere jugar con SQL y lo que puede hacer, SQLFiddle.com tiene algunos modelos RDBMS diferentes con los que puede jugar (ejecutar consultas, crear esquemas, etc.)

Charleh
fuente
Python tiene una interfaz de biblioteca estándar incorporada para sqlite3. Por lo tanto, instalar una base de datos no es un problema. Mi consideración es que si sigo almacenando datos, a menos que tenga algún tipo de indexación, puede volverse lento. Una base de datos puede encargarse de eso, creo. Descargué sqlite3 por separado para aprenderlo, descubrí que necesitaba aprender sobre modelos de bases de datos antes de usar una base de datos, lo intenté. Puedo aprender sqlite3 usando ejemplos basados ​​en Internet, pero actualmente tengo problemas para aprender los modelos de bases de datos. ¿Entonces se me ocurrió si valía la pena?
Aseem Bansal
2

Como siempre, usar una base de datos o no depende de lo que necesite hacer. Si tiene una gran cantidad de datos y necesita realizar muchas consultas diferentes, probablemente una base de datos podría ayudarlo.

En su caso, mantendría el almacenamiento en un archivo de prueba hasta que el rendimiento sea aceptable. Por lo general, leer un archivo de texto (incluso grande) no lleva tanto tiempo. Si necesita más, siempre puede agregar la base de datos más tarde.

Según mi experiencia, si es completamente nuevo en bases de datos, puede resultarle más fácil usar algo como couchdb: http://couchdb.apache.org/ que no es sql y puede usar directamente javascript o python, etc. para consultas.

Lorenzo Baracchi
fuente