Conseil "fléxibilité" pour stockage massif - SQL/NoSQL - Programmation
Marsh Posté le 09-12-2018 à 15:03:00
Dans mon outil de gestion de conf Icare (cf. ma signature), j'avais fait une table "attributs" qui contenait un ID, un nom d'attribut et une valeur de cet attribut. Cette table avait une relation n-n avec la table des configurations à gérer. En effet, j'avais constaté que de nombreuses confs partageaient un bon nb d'attributs avec le même nom et la même valeur. Du coup, au lieu de les dupliquer, j'en avais qu'un exemplaire et la table entre les 2 (confs-attributs) stockait les liens entre les confs et les attributs. Quand plus aucune conf n'avait de lien avec un attribut donné, je le supprimais. Par rapport à un autre logiciel de gestion de confs, pour les mêmes infos à gérer (environ 270 confs avec chacune, entre 150 et 300 attributs), on est passé d'une BD de 100 Mo à 5 Mo et des temps d'accès bien mieux
Tu peux t'en inspirer. Après, tu peux regarder aussi du côté des BD NoSQL. Mais quelques millions d'enregistrements, c'est pas une grosse BD
Marsh Posté le 09-12-2018 à 16:10:13
En gros tu veux une BdD où tu puisses gérer des objets qui possèdent des champs qui ne sont jamais exactement les même d'un objet à l'autre.
Faire ça en relationnel pur avec 99% de colonnes vides c'est très moche. Et chiant à manipuler.
Ce que décrit rufo, c'est un modèle EAV :
- Une table qui liste les objets
- Une table qui liste les champs possibles pour tous les objets
- Une table qui contient des LIGNES où pour chaque ligne tu viens lier un objet à 1 champ, et spécifier pour chaque champ sa valeur. A la fin tu as x lignes par objet, x dépendant du nombre de champs que cet objet comporte.
T'as qu'à faire ça
Ou utiliser une base nosql, mais vu la taille modeste de ta base ça ne parait pas indispensable.
Marsh Posté le 09-12-2018 à 21:31:58
Merci beaucoup à vous deux
J'ai mieux compris ton message totalrecall
Je vais étudier cette piste, en fait si je comprends bien, vous stockez tout en lignes plutôt qu'en colonnes.
Marsh Posté le 09-12-2018 à 23:05:25
En quelque sorte.
Marsh Posté le 06-12-2018 à 22:36:36
Bonsoir,
Je cherche des conseils pour un projet m'amenant à brasser énormément de données svp.
J'ai aujourd'hui une base SQL Server contenant des dizaines de millions de lignes d'ID.
Associés à ces IDs, j'ai une centaine de variables pour lesquelles j'ai plus ou moins de valeurs renseignées (parfois 100% des IDs ont une valeur pour une variable, parfois 1% renseignés & 99% NULL).
Pour différents sujets pros, je vais être amené à générer des tables SQL (ou fichiers CSV) contenant X% de ces IDs et tout ou parties des variables.
Aussi, je tiens à ce que les variables soient "flexibles", c'est-à-dire que je puisse en ajouter ou en supprimant facilement. Sachant qu'elles seront toutes recalculées mensuellement.
- Pensez vous que SQL Server soit prévu pour ce genre d'usage ?
- Si oui, me conseillerez vous de faire une énorme table avec tout mes IDs et toutes mes variables, avec des "select" selon mes besoins d'exports ?
Je crains cette solution car pour ajouter une variable, cela veut dire faire une jointure avec la grosse table + nouvelle table/nouveau fichier.
Ou existe-t-il des solutions bigdata, opensource, ou autre, qui me permettrait de facilement :
- ajouter/supprimer des variables pour ces millions d'IDs ?
Mon but est d'avoir une solution la plus flexible possible en terme d'ajout/suppression de variables, et pouvoir faire des exports relativement rapidement.
Merci beaucoup pour votre aide et conseils