Bonjour,

Je m'intéresse nouvellement aux base de données et à MongoDB en particulier. J'aurais besoin de conseils pour établir le schéma de ma base.

En ce qui concerne la quantité de données : environ 5000 entrées à ajouter tous les jours.
(L'ajout en lui-même ne sera pas forcément quotidien, il pourra être hebdomadaire ou mensuel)

J'ai déjà un historique d'une trentaine d'années et bien sûr la base doit continuer à grossir pour les années à venir.
Une fois entrées dans la base, ces données n'évoluent pas.

On peut décomposer les 5000 entrées comme suit :
Deux groupes de sources (A = 300 éléments, B = 200 éléments), et pour chaque source 10 "types" de données (chaque donnée étant représentée par un flottant).

En ce qui concerne l'accès aux données :
Une requête concerne :
- un sous-ensemble de A ou de B (liste de sources s0..s499)
- un "type" de données (t0..t9)
- une période de temps (date_debut, date_fin)

J'ai remarqué que le scenario utilisateur enchaine souvent les mêmes requêtes en changeant juste le "type" de données.
On pourrait donc envisager (selon les perfs) de proposer une requête :
- un sous-ensemble de A ou de B (liste de sources s0..s499)
- plusieurs "type" de données (liste de types t0..t9)
- une période de temps (date_debut, date_fin)

Aujourd'hui, j'ai créé une base par groupe de sources (dbA et dbB).

Dans chaque base, j'ai créé une collection par année civile et par "type" de données (par exemple une collection nommée t3_2001).
Une collection regroupe donc à peu près 300*365=109500 entrées dans une base, 200*365=73000 entrées dans l'autre.

Une entrée est un document contenant une date, une référence de la source (de type int) et une valeur (de type float).

Une requête ressemble donc à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
dbA.t0_2013.find({source : {$in: liste_sources}, date : {$gte : date_debut, $lte : date_fin}})
(Par rapport aux informations fournies par l'utilisateur, il faut donc que je fasse un travail de découpe de la période en sous-périodes par année civile.)

Ce choix vous parait-il pertinent ? Les collections sont-elles trop petites ?
Avez-vous un conseil à me donner ?


Merci d'avance pour votre aide