IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NoSQL Discussion :

Stockage de données temporelles en 1 seule table


Sujet :

NoSQL

  1. #1
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 273
    Points : 4 102
    Points
    4 102
    Par défaut Stockage de données temporelles en 1 seule table
    Bonjour,

    Je suis à la recherche d'un moyen existant ou non pour stocker des données sur une seule table.

    C'est pour un suivi de ma consommation électrique et de la production de mes panneaux solaires. Je suis donc arrivé à la table suivante :
    - debut: timestamp en int64 (i64)
    - durée : int8 ou int16 (u8 ou u16) / ou fin en timestamp
    - produit : int16 ou peut être 32 bits pour permettre a de grosse installation de produire plus de 65535W
    - consommé : même type que produit
    - panneau : champ pour éventuellement stocker le détail de la production par panneau (ID_panneau_solaire, <produit en watt>)

    Mon fichier ne peut pas grossir indéfiniment avec le temps donc j'aurais besoin de le diviser selon un critère à définir. J'ai une ligne par 15 minutes (ce qui correspond à un peu plus de 35000 ligne/an).
    Je n'ai pas besoin de modifier les données.
    Je souhaite juste afficher et filtrer les données.

    J'ai regardé plusieurs choses (InfluxDB, TimescaleDB, SurrealDB, Sonnerie) mais ça me semble overkill pour ce que je veux.

    Mon approche naïve serait de :
    - stocker dans fichier un binaire par année
    - pouvoir supprimer les fichiers des années précédentes "à la main"

    Qu'en pensez vous ?

    PS : je développerais mon projet en Rust

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Dans une seule table vous allez avoir de la redondance au niveau de l'attribut panneau.

    Pour information, le volume des données pour votre table (sans l'attribut panneau que vous n'avez pas typé) ferait de l'ordre de 32 octets par lignes... Plus quelques coût techniques supplémentaires mettons 45 octets.
    Sachant qu'il y a 24 x 60 / 15 => 96 points dans le temps à stocker par jour soit 35 064 lignes par ans de 45 octets => 1,5 Mo... C'est très peu... !

    Même si l'on multiplie par le nombre de panneau solaire (pour relever une consommation individuelle de chaque panneau si c'est possible...) , mettons 32 et pour 10 ans, on arrive au volume global de 505 Mo.... c'est peanuts. En y ajoutant des index on aurait alors moins de 1 Go de données.

    Bref, ne vous emmerdez pas prenez SQL Server Express qui est gratuit dont les bases sont limitées à 10 Go (mais vous pouvez en créer 32760 sur la même instance) par exemple une par an et faire des requêtes UNION ALL entre les tables des différentes bases....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 273
    Points : 4 102
    Points
    4 102
    Par défaut
    Merci pour votre réponse @SQLpro

    J'ai oublié de préciser, j'aimerai une solution sans serveur, type SQLite.

    Pour les panneaux, ils seraient identifiés par un ID (u8 ou u16) et la valeur associée serait un u16.

    Mes requêtes seront hyper basiques :
    - ajout de ligne, pas de modification prévue à ce jour, donc logiquement ça serai par ordre chronologique
    - requête sur début pour filtrer un intervalle de temps

    Si je dois faire de l'analyse à côté (lien avec météo et température, utilisation d'un appareil électrique dans un intervalle), je compte exporter ce que je veux à côté.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Hé bien utilisez SQL lite... Mais c'est mono utilisateur et pas fait pour de grandes tables...

    Un index sur les colonnes debut et fin avec en sus la colonne clé de la table (je ne crois pas que la clause INCLUDE existe sur SQLlite).

    Un clé de type INT (4 octets) suffit. Elle permet 4 milliards de lignes...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/02/2008, 11h34
  2. plusieurs tables dans une seule table
    Par scully2501 dans le forum Access
    Réponses: 1
    Dernier message: 10/10/2005, 09h19
  3. Table de jointure pour une seule table
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/10/2005, 18h49
  4. Réponses: 4
    Dernier message: 14/09/2005, 16h29
  5. Une seule table VS plusieurs tables
    Par LostControl dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/08/2003, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo