Bonjour,
Je suis en manque d'inspiration.
Je voudrais écrire une petite application et je ne sais pas quoi choisir comme mécanisme de persistance.
Mon application doit stocker des listes d'objets tous semblables mais pas forcément simples (ie: avec des compositions et des listes comme attributs).
Mes critères sont :
- embarqué (ie: pas de client serveur)
- utilisable en python et si possible avec d'autres langages (java, shell (donc cli))
- pérenne (ie: que je puisse continuer à lire les données dans quelques temps)
J'ai envisagé :
- SQLite, je suis assez fan du logiciel mais pas trop envie de me coller du SQL (requête, connection, statement, curseur pfff)
- Fichier texte plat (csv ou json, ou autre) : j'aime bien l'aspect interopérable mais pas très scalable et pas vraiment robuste si je veux plusieurs processus écrivain
- CouchDB mais je crois que c'est client serveur et il faut écrire du JS
- MongoDB mais ça me paraît un peu lourd ET client/server
- Redis et j'avais lu ici même que ça existait en embarqué (http://vedis.symisc.net/) mais je ne sais pas ce que ça vaut
Quels sont vos suggestions (argumentées si possibles) ?
Merci de vos lumières
# Fichier plat ou presque
Posté par Sébastien Maccagnoni (site web personnel) . Évalué à 3.
Salut,
Si tu peux sérialiser tes données, tu peux utiliser un format genre BDB, assez universel…
À la limite tu peux mettre un lockfile, à toi après de vérifier l'absence du lockfile avant de modifier les données dans chacun des processus.
De toute manière, si tu ne veux pas faire du client-serveur, tu n'as pas le choix : il faut un stockage dans un fichier et un moyen de vérifier qu'un autre processus n'a pas déjà ouvert le fichier. Même avec SQLite, il faut une gestion dans ce genre (http://www.sqlite.org/lockingv3.html).
# Sergent évidemment.
Posté par Sidonie_Tardieu . Évalué à 1. Dernière modification le 04 février 2014 à 23:31.
Tu connais sqlite, tu en es fan, tu sais que ça marche, tu sais que tu peux le faire, et tu te poses la question ?
N'aie pas peur d'être vieux, sois vieux.
Pour un sextumvirat ! Zenitram, Tanguy Ortolo, Maclag, xaccrocheur, arnaudus et alenvers présidents !
[^] # Re: Sergent évidemment.
Posté par yohann (site web personnel) . Évalué à 2.
sqlite sans SQL => sqlalchemy l'orm pour python!
[^] # Re: Sergent évidemment.
Posté par yohann (site web personnel) . Évalué à 1. Dernière modification le 05 février 2014 à 17:44.
edit mais trop tard alors je me répond: oups il faut argumenter:
avec sqlalchemy, tu décris tes objets (et leurs relations) en python, puis tu indique ton backend (sqlite par exemple).
Après dans le code ça donne un truc comme:
[^] # Re: Sergent évidemment.
Posté par totof2000 . Évalué à 2.
Il faudrait savoir s'il y a une contrainte de langage dans le besoin. En ruby il y a par exemple ActiveRecord, mais il y en a d'autres tant pour ruby que pour d'autres langages.
# Redis
Posté par Salk . Évalué à 0.
Ptet essayer : http://redis.io/
[^] # Re: Redis
Posté par steph1978 . Évalué à 2.
Redis, j'aime bien le concept et l'api par contre, client/serveur. C'est pour ça que je voulais savoir si qqun avait testé la version embarquée, vedis.
# pistes
Posté par steph1978 . Évalué à 2. Dernière modification le 18 février 2014 à 17:55.
Pour l'instant, je suis parti sur des fichiers json à plat. Pour un prototype, ça fonctionne pas mal et ça simplifie l'infrastructure à mettre en place.
Si je poursuis le développement, je suis très tenté d'utiliser elasticsearch car : json, scalable, api assez riches, wrappers dans plein de langages. Inconvénients : une jvm à démarrer, mode client serveur.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.