Question sur le stockage

De manière très générale

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Alors voila. Je compte aujourd'hui m'attaquer à un problème que je rencontre couramment lorsque je code. "Comme je stocke ces données sur le disque ?" C'est une question que je me pose trop souvent je trouve. Souvent, je n'ai pas de réponse immédiate.

Pour moi la performance est le point essentiel. Performance en ajout et en lecture d'information. Mais j'aimerais que les données soit accessible en Python en C mais pourquoi pas en JS aussi.

Par exemple, je voulais stocker des phrases liées à une date. J'ai utiliser un fichier texte formaté de manière perso.

Je souhaitais stocker des questions / réponses un peu complexe (plusieurs réponses pour la même question par exemple). Pour le coup, je voulais que ce soit simplement accessible en JS, du coup, je l'ai fais en JSON.

Je voulais stocker des données (des livres par exemple) chaque entrées à ses propres informations (auteurs, titre, date d'achat, …). Ben là, au début j'ai utilisé la sérialisation, puis j'ai eu besoin de faire un truc portable lisible depuis plusieurs langage, du coup, j'ai utilisé une BDD.

Comment je peux faire un choix facilement ?
Comment faite vous le choix de quand utiliser quoi ?

PS: Oups, je me rend compte que j'ai mal rangé ce poste. Je suis dans SiteWeb alors que je souhaitais le ranger dans programmation :s Merci grand loup <3

+0 -0

Je pense qu'il n'y a aucune solution clé-en-main pour décider quel format ou système de stockage employer. C'est forcément hyper dépendant des conditions du projet.

Ça a beau avoir l'air d'une question idiote, ça reste un choix crucial dans la vie d'un projet, même si ça n'en a pas l'air. À partir de là, difficile de dégager des guidelines générales.

+1 -0

Salut,

Je rejoins l'avis de nohar : ça dépend de ton projet et de ses besoins. Cela se traduit assez bien dans la réalité puisqu'il y a une pléthore de formats, même pour des données de même type.

Par contre, il y a deux choses que je peux te conseiller :

  1. Employe le plus possible du texte pour stocker les données. Les formats binaires c'est cool pour les performances, mais qu'est-ce que c'est prénible quand tu veux les changer de machines, les modifiers ou effectuer des recherhes dedans… Le texte induit de la lenteur, mais au moins tu peux traiter et modifier ça facilement avec des outils de bases (cut, sort, awk, sed, etc.).

  2. Recours si possible à un format simple. J'ai trop souvent vu des projets employer du XML ou du JSON alors qu'un simple format INI ou un truc approchant aurait largement suffit.

+1 -0

Merci de vos réponses.

Ben franchement Protocol Buffer à l'air vraiment pas mal … Je me renseigne !

@nohar: Oui justement. Mais il doit bien y avoir de manières générales des cas où ils est plus pratique que d'autres d'utiliser tel ou tel format stockage ?

@SpaceFox: On va supposé qu'on est dans le pays des bisounours. Tout le monde utilise de l'UTF8 et tous les langages le supporte. <troll>Et tous les sites aussi …</troll>

@Taurre: Je suis tout à fait d'accord sur le fait que le texte, c'est bien plus facile à manipuler.

Sinon, le format INI, c'est genre le format de config des services systemd ou encore le format de pacman.conf ?

+0 -0

Merci de vos réponses.

Ben franchement Protocol Buffer à l'air vraiment pas mal …

Tu as Cap'N Proto aussi qui est un reboot de protobuf par son créateur, depuis qu'il a quitté Google.

Cela dit je ne suis pas hyper fan de protobuf en Python. D'abord parce qu'il éclate la coding-style standard, et ensuite parce qu'il introduit un processus pas du tout trivial pour générer ton datamodel, donc sur des projets petits et simples je ne partirais pas directement dessus. J'attendrais que la complexité et les perfs le justifient.

@nohar: Oui justement. Mais il doit bien y avoir de manières générales des cas où ils est plus pratique que d'autres d'utiliser tel ou tel format stockage ?

ache

Ben perso je pars toujours KISS avec du JSON pour les echanges et pourquoi pas de l'INI/ToML pour la conf. Si le format "JSON-like" (en arborescence) doit être touché par un humain et dans des parties non critiques en perfs/volume, j'aime bien passer à YaML qui est drôlement plus cool à manipuler que le JSON.

Mais après ça dépend vraiment des besoins. J'ai déjà vu passer à des formats binaires maison (TLV) pour remplacer du XML en minimisant le temps de parsing, par exemple, mais dans un use-case où le besoin et l'impact en perfs justifiaient le temps passé à coder ce style de lib.

En termes de systèmes de stockage ça depend aussi des usages : tu veux que les données soient résilientes ? Partagées en local ? Partagées sur le réseau ? Avec des accès concurrents ? En lecture et en écriture ? Les données sont plutôt adaptées à du clé-valeur ou du relationnel ? Quelle est la taille d'une donnée unitaire moyenne ?

Tous ces critères et leurs combinaisons possibles vont avoir une influence, et les solutions vont aller du fichier .pickle dans un ramfs à un cloud qui expose une API Amazon S3, en passant par du sqlite, du redis, du mongodb…

+0 -0

Merci.

Du coup, je pense que je n'ai pas le choix. Le meilleur moyen de répondre à cette question est d'étudier le plus possible de méthodes/formats de stockage afin de comprendre dans quels cas utiliser chacun(e)s.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte