Quand faut-il utiliser la base de données plutôt que d'analyser les données d'un fichier texte?

13

Je faisais un programme Python pour mesurer la croissance de codereview.SE . Mon approche était d'obtenir les "statistiques du site" affichées sur la première page et de les stocker sur mon disque dur. Je prévois de le faire une fois par jour. Jusqu'à présent, j'ai fait assez pour obtenir les statistiques et les ajouter à un fichier texte. Le script python peut être consulté sur github . Le format que j'utilise est le suivant

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

Je viens d'exécuter le script deux fois pour obtenir le format que j'utiliserais dans le fichier. Au départ, cela me semblait bon car je le stockerais moi-même et le format serait le même, donc il serait facilement analysé, mais je ne suis pas sûr. Il semble que l'utilisation d'une base de données devrait être meilleure ici, car la récupération des données devrait être plus facile. Juste une note, je n'ai jamais utilisé de base de données et je n'ai aucune connaissance de SQL, MySQL ou d'autres variantes de RDBMS.

Cela m'amène donc à la question. Quand faut-il préférer une base de données pour le stockage des données au stockage des données dans un fichier texte? Y a-t-il des conseils que je peux rechercher lorsque je décide si j'ai besoin d'une base de données ou de simples fichiers texte?

PS: Si de meilleures balises peuvent être ajoutées, veuillez le faire. J'avais des doutes sur les balises qui pourraient être ajoutées.

Aseem Bansal
la source
"Chaque outil est un passif jusqu'à ce que vous appreniez à l'utiliser."
JeffO
1
Une base de données peut être appropriée ou non pour votre projet. Vous pourriez cependant trouver utile d'utiliser un format plus simple. Il existe un module CSV standard avec Python que vous pourriez envisager d'utiliser. Avoir un CSV simplifierait l'exportation des données vers d'autres programmes (par exemple - dans une feuille de calcul afin que vous puissiez les représenter graphiquement).
Sean McSomething

Réponses:

13

Quand faut-il préférer une base de données pour le stockage des données au stockage des données dans un fichier texte?

Wikipédia nous dit que base de données est une collection organisée de données . Par cette mesure, votre fichier texte est une base de données. Il poursuit en disant:

Les données sont généralement organisées pour modéliser les aspects pertinents de la réalité d'une manière qui prend en charge les processus nécessitant ces informations. Par exemple, modéliser la disponibilité des chambres dans les hôtels de manière à faciliter la recherche d'un hôtel avec des places libres.

Cette partie est subjective - elle ne nous dit pas spécifiquement comment les données doivent être modélisées ou quelles opérations doivent être optimisées. Votre fichier texte se compose d'un certain nombre d'enregistrements distincts, un pour chaque jour, de sorte que vous modélisez un aspect de la réalité d'une manière adaptée à votre problème.

Je me rends compte que lorsque vous dites "base de données", vous pensez probablement à une sorte de système de gestion de base de données relationnelle, mais penser à votre fichier texte comme une base de données change votre question de "quand devrais-je utiliser une base de données?" à "quel type de base de données dois-je utiliser?" Voir les choses sous cet angle rend la réponse plus facile à voir: utilisez une meilleure base de données lorsque celle que vous avez ne répond plus à vos besoins.

Si votre script Python et votre fichier texte simple fonctionnent assez bien, il n'est pas nécessaire de le modifier. Avec un seul nouveau record par jour et des ordinateurs de plus en plus rapides chaque année, je soupçonne que votre solution actuelle pourrait être viable à long terme. Une décennie de données ne vous donnerait que 3650 enregistrements qui, une fois analysés, nécessiteraient probablement moins de 75 kilo-octets.

Imaginez qu'au lieu d'un petit enregistrement par jour, vous décidiez d'enregistrer toutes les questions posées sur CodeReview, qui les a posées et quand. De plus, vous collectez également toutes les réponses et les métadonnées pertinentes. Vous pouvez stocker tout cela dans un fichier texte, mais un fichier plat rendrait difficile la recherche d'informations lorsque vous en aviez besoin. Il y aurait trop de données pour lire le tout dans la mémoire, donc chaque fois que vous vouliez trouver une question ou une réponse, vous deviez parcourir le fichier jusqu'à ce que vous trouviez ce que vous cherchiez. Lorsque vous souhaitez trouver toutes les questions posées par un utilisateur donné, vous devez parcourir l'intégralité du fichier. Si vous souhaitez trouver toutes les questions qui ont des "bogues" comme balise, vous devrez parcourir le fichier.

Ce serait horriblement lent, vous pouvez donc décider d'accélérer les choses en créant des index qui vous indiquent où chercher dans le fichier pour trouver un enregistrement donné. Vous pouvez avoir un index pour les questions, un autre pour les utilisateurs, un troisième pour les réponses, etc. Lorsque vous vouliez trouver une question, vous recherchiez l'index de questions (beaucoup plus petit), obteniez la position de la question dans le fichier de données principal et sautiez rapidement au bon endroit dans le fichier. Ce serait une grande amélioration des performances. En effet, c'est à peu près ce qu'est un système de gestion de base de données.

Alors, utilisez un SGBD quand c'est ce dont vous avez besoin. Utilisez-le lorsque vous avez beaucoup de données, lorsque vous devez pouvoir accéder à ces données rapidement et peut-être d'une manière que vous ne pouvez pas entièrement prévoir au départ. Si vous avez différents types de données - différents types d'enregistrements - qui sont connectés les uns aux autres, utilisez un SGBDR afin de pouvoir relier les différents enregistrements de manière appropriée.

Caleb
la source
3
"penser à votre fichier texte comme une base de données change" Très perspicace. De plus, la partie sur moi qui n'avait que 3650 entrées était utile. Cela a aidé à avoir une véritable perspective du problème.
Aseem Bansal
1
Réponse très sous-estimée, c'est la deuxième fois que j'y reviens.
Hashim
6

Les bases de données présentent de nombreux avantages, mais facilitent l' accès n'en fait pas partie. Plus rapide, plus standardisé, interprétable comme un sous-langage de commande intégré, plus sûr, oui - mais pas plus facile. Quelle que soit la quantité de sucre syntaxique fournie par votre langue et votre bibliothèque standard, vous devez d'abord avoir une base de données, ouvrir une connexion et acheminer les données de votre programme quelque chose de complètement différent et inversement. Tant qu'il n'y a pas de problème avec ce que vous faites et que la facilité de programmation est votre priorité, ne passez jamais à une base de données simplement parce que vous pensez que c'est une "bonne pratique".

Mon point de vue sur le moment de changer est de suivre l'évolution historique. Après tout, les gens ont stocké des données dans des fichiers pendant longtemps avant que la base de données relationnelle ne soit inventée, et en fait, tout un tas de modèles de base de données inférieurs (base de données hiérarchique, base de données réseau ...) ont été inventés avant cela. Ils ont commencé à écrire des bases de données et les ont utilisées lorsqu'il est devenu clair que cela permettrait d'économiser des efforts de traitement importants, d'augmenter la fiabilité, etc., de manière globale et à long terme . Tant que ce n'est pas le cas pour vous, et que vous ne prévoyez pas que cela devienne le cas de sitôt, le changement serait une ingénierie excessive.

Kilian Foth
la source
La cohésion n'est-elle pas mieux offerte selon la conception globale? par exemple, dans mon cas, je stocke 5 valeurs correspondant à chaque date. Dans l'état actuel, il n'y a pas de cohésion entre les données.
Aseem Bansal
Vous avez raison, vous assurer que tous les enregistrements ont un ensemble cohérent de champs et de valeurs est un autre de ces avantages. (Strictement parlant, ce ne sont que les bases de données relationnelles qui garantissent cela. Les gens ont utilisé des bases de données non relationnelles en production pendant une longue période, et actuellement ils reprennent du terrain avec le mouvement "NoSQL".)
Kilian Foth
3

Ce sera bien sûr un appel au jugement, mais les trois principaux critères que je considérerais sont: doit-il être conforme à ACID , à quel point les données sont complexes et enfin, combien de choses doivent être lues / écrites. Tant que vous lisez et écrivez simplement une ligne par et que votre application est la seule application à lire ou à écrire, vous pouvez probablement ignorer la base de données. Une fois que vous commencez à avoir plusieurs applications en lecture ou en écriture ou que votre structure de données devient complexe (en particulier si elle a des relations entre des lignes distinctes), une base de données commence à être vraiment attrayante.

jmoreno
la source
"combien de choses doivent être lues / écrites" - cela a aidé.
Aseem Bansal
2

Les bases de données sont utilisées non seulement pour stocker, mais aussi pour manipuler et interroger des données, vous devez donc prendre une décision éclairée:

Un gros facteur est l'avantage que vous retirez de l'installation d'une base de données sur la machine par rapport aux fonctionnalités qu'elle apporte

De toute évidence, si vous devez interroger et manipuler les données, et que vous souhaitez que l'accès soit rapide - et en outre, vous envisagez peut-être d'utiliser une base de données pour d'autres fonctions, cela peut être une bonne idée. Les modèles de stockage des bases de données permettent de rechercher très rapidement les données par valeurs clés, et je peux imaginer que l'analyse d'un fichier peut être lente (selon la façon dont vous le faites)

Si vous voulez jouer avec SQL et ce qu'il peut faire, SQLFiddle.com a quelques modèles de SGBDR différents avec lesquels vous pouvez jouer (exécuter des requêtes, créer un schéma, etc.)

Charleh
la source
Python a une interface de bibliothèque standard intégrée pour sqlite3. L'installation d'une base de données n'est donc pas un problème. Ma considération est que si je continue à stocker des données, à moins d'avoir une sorte d'indexation, cela peut devenir lent. Je pense qu'une base de données peut s'en occuper. J'ai téléchargé sqlite3 séparément pour l'apprendre, j'ai constaté que je devais en savoir plus sur les modèles de base de données avant d'utiliser une base de données, j'ai essayé. Je peux apprendre sqlite3 à l'aide d'exemples basés sur Internet, mais j'ai actuellement des problèmes d'apprentissage des modèles de base de données. Ensuite, il m'est venu à l'esprit si cela valait même la peine?
Aseem Bansal
2

Comme toujours, l'utilisation d'une base de données ou non dépend de ce que vous devez faire. Si vous avez une énorme quantité de données et que vous devez y effectuer de nombreuses requêtes différentes, une base de données pourrait probablement vous aider.

Dans votre cas, je conserverais le stockage dans un fichier de test jusqu'à ce que les performances soient acceptables. Habituellement, la lecture d'un fichier texte (même volumineux) ne prend pas autant de temps. Si vous en avez besoin, vous pouvez toujours ajouter la base de données ultérieurement.

Pour mon expérience, si vous êtes complètement nouveau dans les bases de données, vous pouvez trouver plus facile d'utiliser quelque chose comme couchdb: http://couchdb.apache.org/ qui n'est pas sql et vous pouvez utiliser directement javascript ou python, etc. pour les requêtes.

Lorenzo Baracchi
la source