Base de données pour stocker des données de capteurs

a marqué ce sujet comme résolu.

Bonjour,

Je travaille sur un petit système électronique consistant à commander une pompe en fonction de valeurs de débits et de niveaux d’eau. Pour mon algorithme de commande et pour générer des statistiques de consommation d’eau, j’ai besoin de stocker de manière persistente mes signaux d’entrée et de sortie. Par exemple :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


class PumpCommand(Base):
    __tablename__ = 'pump_command'

    id = Column(Integer, primary_key=True)
    running = Column(Boolean)
    datetime = Column(DateTime, default=datetime.datetime.utcnow)


class WaterLevel(Base):
    __tablename__ = 'water_level'

    id = Column(Integer, primary_key=True)
    value = Column(Float)
    datetime = Column(DateTime, default=datetime.datetime.utcnow)

Bref, ma base de données est très simple. Je n’ai pas besoin de faire de jointure, juste de lire simplement mes tables indépendamment.

Sachant cela, ainsi que le tout sera pour l’instant hébergé sur une RPi, je pensais m’orienter vers une base NOSql. Seulement, malgré mes recherches, je n’ai rien trouvé d’évident.

Redis me semble léger et performant, mais j’ai l’impression qu’il n’y a pas de notion de table. Or il me semble assez peu judicieux de stocker "au même endroit" mes mesures de débit et mes commandes de pompe.

MongoDB semble plus adapté de ce point de vue, mais je n’aurai pas utilité de la majeure partie de ses fonctionnalités, donc je suis un peu réticent à opter pour un truc aussi lourd.

Auriez-vous des conseils ? En, fait ce que je pense rechercher semble bêtement équivalent à :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
pump_commands = [
    {
        'id': 1,
        'running': False,
        'datetime': ...,
    },
    ...
]

water_levels = [
    {
        ...
    },
    ...
]

Mais si je pouvais avoir un ORM et un vrai système de stockage (que je pourrais par exemple répliquer) derrière, ça m’arrangerait. Je travaille en Python.

Merci.

+0 -0

Salut !

Juste pour savoir, est-ce que tu connais le format JSON ? Car c’est exactement le format que tu nous donnes à la fin :p

Tu pourrais alors peut-être stocker tes données dans un (ou plusieurs) fichiers textes et récupérer / modifier le contenu en quelques lignes pythons en se passant donc de la lourdeur d’une BDD. Ici tu trouveras quelques exemples pour te donner une idée de comment lire/écrire un fichier JSON. Je ne sais pas si tu avais déjà considéré cette solution, je te la donne juste pour que tu puisses explorer.

Merci pour ta réponse. Oui, je connais le JSON. Mais bosser avec des fichiers, ça me parait être du bricolage :

Mais si je pouvais avoir un ORM et un vrai système de stockage (que je pourrais par exemple répliquer) derrière, ça m’arrangerait. Je travaille en Python.

+0 -0

Pour la même raison que je suis réticent à utiliser MongoDB : je n’aurai usage que d’une petite portion des fonctionnalités de Django, donc il ne semble pas judicieux d’imposer cette dépendance plutôt lourde.

Mais quand je parle d’ORM, je n’ai pas en tête un truc aussi complet que Django. Le module Python sqlite3 ferait très bien l’affaire. Sauf que le SQL ne semble pas adapté à mon problème.

+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