Quelle est la meilleure façon de déterminer quand il convient d'utiliser une base de données?

13

J'ai commencé ma carrière en programmation dans le développement web en utilisant PHP et MySQL. Je me suis habitué à utiliser db pour le stockage de la plupart des données dynamiques ainsi que certaines données de réglage / paramètres. Parfois, il y avait beaucoup de données tandis que d'autres fois, les entrées dans les tableaux étaient peu nombreuses. Pour moi, cela semblait tout simplement naturel et, autant que je sache, c'est plus ou moins une approche acceptable dans le développement Web. (Corrigez-moi si j'ai tort, s'il-vous plait...)

Je plonge dans les applications de bureau maintenant et mon inclination naturelle est à nouveau d'utiliser une base de données pour stocker beaucoup d'informations qui seront générées par l'utilisation de l'application. Cependant, pour autant que je sache, je ne vois pas les applications (que j'utilise) utiliser un db très souvent. [EDIT: Il a depuis été souligné qu'il s'agissait d'une hypothèse erronée dans la mesure où de nombreuses applications utilisent des dbs légers intégrés dans le programme lui-même.] Quelle est la raison de cela? À quel moment est-il approprié d'utiliser une base de données? Existe-t-il des normes à ce sujet? Quelles sont également les raisons de NE PAS utiliser de base de données pour développer une application de bureau?

Kenneth
la source
2
"Cependant, pour autant que je sache, je ne vois pas les applications (que j'utilise) utiliser une base de données très souvent"? Sur quoi? S'ils utilisaient SQLite, comment pourriez-vous savoir s'ils utilisaient ou n'utilisaient pas une base de données?
S.Lott
C'est pourquoi j'ai dit autant que je sache, car je savais qu'il y avait une possibilité que je me trompe. J'ai pensé qu'il pourrait y avoir des applications qui utilisent des db intégrés ... Est-il assez courant que les applications utilisent des dbs?
Kenneth
@Kenneth: Veuillez Google pour les bases de données intégrées comme SQLite. Il y a beaucoup de. Ils sont largement utilisés. AFAIK, iOS d'Apple l'utilise pour toute persistance. Veuillez Google.
S.Lott
2
Je Google beaucoup. Parfois, bien que rien ne remplace les opinions expérimentées que vous ne pouvez pas toujours trouver sur Google.
Kenneth
1
Je pense que ces commentaires sont suffisants pour corriger l'hypothèse erronée. Je m'excuse pour l'erreur. Je sens que j'utilise un mélange sain de googler et de poser des questions. Parfois, il n'y a pas de substitut à ce dernier IMHO. Maintenant, ma recherche sur Google sera mieux dirigée et plus productive.
Kenneth

Réponses:

4

si votre application est orientée document, stockez les choses dans un fichier document

si votre application traite de données plus structurées, trop pour un seul document (comme un document XML), utilisez une base de données

Steven A. Lowe
la source
7

Un système de base de données est traditionnellement considéré comme un service relativement lourd - que vous ne vouliez pas nécessairement installer sur chaque machine cliente. J'ai en fait été dans des situations (développement d'applications GUI de bureau où beaucoup de données devaient être enregistrées) où un vrai système DB aurait été une solution "idéale" - mais parce qu'à l'époque, les seules bases de données disponibles étaient relativement lourdes, nous avons opté pour des fichiers de données plats.

Malgré l'existence de bases de données plus légères ces jours-ci, il s'agit toujours d'un argument valable contre les bases de données côté client. Imaginez une petite application de bureau simple (par exemple, un simple jouet ou jeu de bureau) qui doit stocker quelques dizaines de réglages et paramètres. Il semble beaucoup plus difficile de faire installer MySQL à une personne juste pour exécuter votre application.

Avec le développement Web, le serveur est naturellement un back-end, où avoir une base de données est une évidence. par exemple. Les utilisateurs n'ont pas à s'inquiéter d'installer une base de données de leur côté.

Tables Bobby
la source
Donc, vous recommanderiez de ne pas utiliser de base de données pour les applications autonomes à moins que de gros volumes de données ne le justifient vraiment?
Kenneth
Que pensez-vous de l'utilisation de bases de données légères ... comme les bases de données à grande échelle?
Kenneth
1
@Kenneth: Je dirais "ça dépend". Si l'application appelle de gros volumes de données tabulaires qui nécessitent vraiment d'être dans une base de données appropriée, l'argument peut être suffisamment fort pour expédier l'application avec une base de données légère. Mais s'il s'agit simplement de données de configuration / paramètres, c'est probablement exagéré.
Bobby Tables
5

Les applications de bureau conservent leur état pendant leur exécution. Alors que le développement Web ne fonctionne généralement pas. Ainsi, même si vous devrez peut-être stocker un paramètre utilisateur dans une base de données entre les chargements de page, dans une application de bureau, vous les gardez simplement en mémoire. Cela réduit considérablement le besoin de tels types de stockage persistant. Lorsque vous souhaitez stocker les préférences entre les utilisations, vous pouvez les enregistrer toutes dans un fichier ou les placer quelque part comme le registre Windows.

Cela étant dit, les systèmes de base de données sont beaucoup utilisés dans les applications de bureau. Bien avant le Web, les applications de bureau ont été connectées aux SGBD. Principalement pour les applications qui ne sont pas basées sur des documents. Bien que ces jours-ci, avec la meilleure disponibilité des moteurs légers, vous voyez les lignes un peu floues. Par exemple, j'utilise les bases de données SQLite comme documents dans quelques-unes de mes applications.

GrandmasterB
la source
+1 Si vous n'avez pas de problèmes de persistance complexes, comme des mises à jour de blocage simultanées multi-utilisateurs et multi-emplacements, une base de données traditionnelle peut être exagérée. Si les données en question sont assez statiques (elles peuvent croître ou être ajoutées, mais n'évoluent pas ou ne sont pas mises à jour), et la contention / concurrence n'est pas fréquente ou perverse (effets secondaires / expérience utilisateur pour attendre un verrou pour libérer) n'est pas inacceptable compte tenu des compromis entre performances et complexité), vous n'avez peut-être pas besoin d'une base de données.
JustinC
4

Vous voudrez peut-être examiner les bases de données légères qui ne nécessitent pas de service de base de données en cours d'exécution. Par exemple, sur le front de Microsoft, il y a SQL Server Compact , qui est gratuit, ne nécessite qu'un seul fichier pour la base de données et certaines DLL ajoutées à votre application, et du point de vue du développeur, se comporte de la même manière qu'un "vrai" SQL Server.

Je suis certain qu'il existe des options similaires sur d'autres plateformes.

Carson63000
la source
1
Un exemple très similaire du côté Java est Derby. Je pense qu'il y en a d'autres aussi.
jprete
1
Cela peut sembler être une solution idéale ... J'aime vraiment utiliser les db's! lol
Kenneth
Y a-t-il des inconvénients à utiliser des bases de données légères?
Kenneth
@Kenneth: Ils agrandissent votre installation et peuvent augmenter la base de code. Mais c'est beaucoup moins que d'installer un serveur de base de données complet sur un client, ce qui n'est généralement fait que lorsque l'application est distribuée et a besoin d'une base de données plus importante. La Berkeley DB est l'une des plus utilisées.
Orbling
une autre option est SQLite, qui est beaucoup plus léger à la fois sur la RAM et l'espace disque, et n'a pas de limitations arbitraires. Pas étonnant qu'il soit utilisé par tous les smartphones et navigateurs Web non MS.
Javier
2

Sur les applications Web, il est important de stocker tout état persistant sur un stockage centralisé. Étant donné que l'application Web est généralement le premier goulot d'étranglement, il est important de pouvoir simplement la distribuer sans avoir à se demander quelle copie contient les données (le principe `` Rien partagé ''). Pas seulement une base de données, mais les memcachedsystèmes de files d'attente sont là pour la même raison.

Les applications de bureau n'ont pas le même objectif d'évolutivité. En règle générale, la plupart des données sont stockées localement sur chaque poste de travail. Le partage des données est un problème différent dans la plupart des cas. Cela élimine une grande raison d'utiliser une base de données.

Les applications GUI peuvent également avoir des documents complexes qui peuvent être traités comme un réseau complexe d'objets en mémoire. La normalisation de la structure dans un schéma de base de données relationnelle peut ajouter une complexité importante au problème, il est parfois plus facile de simplement sérialiser le tout en un seul bytestream. De nombreux cadres OOP incluent des fonctionnalités rien que pour cela.

Pourtant, rendre les documents stockés lisibles avec des outils en dehors de l'application principale est un grand avantage dans de nombreux cas, donc soit en utilisant des formats lisibles par l'homme (XML, JSON, YAML, etc.), soit un fichier zip fusionnant plusieurs éléments plus simples deviennent de plus en plus plus commun.

Dans le même esprit, l'utilisation d'une bibliothèque de bases de données embarquables (BDB, Tokyo Cabinet, SQLite, MS-SQL * server Compact, etc.) est une autre excellente approche.

Javier
la source
1

Les bases de données peuvent être excessives, mais elles ne le sont généralement pas . Les programmes très simples n'en ont tout simplement pas besoin. Si votre document peut se charger en mémoire en un temps record et y rester sans problème, vous n'en avez pas vraiment besoin pour de nombreux programmes.

Par exemple, considérez:

#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;
}

Eh bien, c'est trop simpliste, mais c'est évidemment trop. Il n'y a aucun intérêt à avoir ce niveau de gestion des données pour "Hello World"

Habituellement, la règle générale que j'utilise est d'utiliser une base de données si vous avez de nombreux ensembles de données, en particulier s'ils sont uniques ou d'utiliser une base de données si la quantité de données est plutôt massive. Les bases de données en général sont associées à certains frais généraux, mais il y en a beaucoup qui n'ont pas vraiment grand-chose. Les petites bases de données légères en mémoire, par exemple, sont parfois utiles pour les petits projets nécessitant un traitement, une planification ou de nombreuses modifications dynamiques des données.

Il existe différents styles de codage, plusieurs fois il n'y a rien de mal avec une base de données, mais la plupart d'entre nous n'iront pas «aussi loin» pour les tâches de base. Il y a encore d'autres fois où la bonne base de données offrirait des avantages en termes de performances. Essayez de comprendre en particulier les différences quant à l'emplacement des données, à leur durée et à leurs modifications au cours de leur durée de vie.

Garet Claborn
la source
1

L'utilisation d'une base de données est toujours la bonne chose et avec les implémentations SQLite pour pratiquement tous les langages qui n'en utilisent pas, c'est juste une mauvaise prise de décision de conception. La seule raison de ne pas en utiliser un est si vous faites de la programmation intégrée ou un autre type de programmation sans application. Interroger des données et des paramètres avec un langage déclaratif comme SQL est beaucoup plus naturel que de parcourir des fichiers plats ou d'autres objets en mémoire avec une syntaxe impérative. De plus, il sépare proprement les opérations de données des autres codes d'application, ce qui à long terme rend le code plus modulaire et plus facile à gérer.

davidk01
la source