Je vais regarder MeteorJS et IndexedDB.
Je vais donner quelques détails sur le projet. L'objectif est de fournir un ensemble de services à destination des écoles. La plupart de ces services font intervenir des algorithmes d'optimisation combinatoire (d'où l'autre topic) que je ferai tourner en local. Pour servir de passerelle entre ces algorithmes et les écoles, je souhaite offrir un front-end permettant d'encoder les données nécessaires à l'algorithme, et d'afficher les données résultants de cet algorithme.
Par exemple, pour mon cas de base, il m'est nécessaire d'avoir une liste des classes, leur cursus ainsi que les enseignants qui interviennent dans ce cursus (via une charge horaire et une matière). J'aimerai fournir une application web permettant d'encoder ces données. Afin de rendre l'encodage "agréable", j'aimerai que l'application soit très dynamique, AngularJS est prévu en ce sens.
De manière générale, ce qui m'importe, c'est juste de fournir un moyen simple d'insérer, modifier, supprimer et lire les données qui sont dans une base de données (relationnelles ou non) propre au client. A la rigueur, je pourrai faire un client lourd et charger/sauver des fichiers contenant ces données, mais je souhaite utiliser une application web essentiellement pour faciliter la mise à jour et le contrôle sur les acteurs.
Mon idée est donc que le client peut avoir totalement accès à la base de données s'il le souhaite, puisque tout ce qu'il peut faire de mal dedans (s'il contourne l'application web pour gérer les données) sera, essentiellement, son problème. J'envisageai, avant de poster ici, et après avoir écrit l'API REST en Python, de simplement "exporter la DB" vers un fichier, fichier qui serait accessible par le client (car hébergé sur un serveur) et manipulable par l'application (du JSON directement accessible depuis AngularJS). Le souci, c'est qu'AngularJS ne semble pas avoir de quoi "manipuler" un tel fichier (à juste titre, c'est pas son objectif).
Je dois donc soit envisager qu'AngularJS puisse manipuler cette DB (localement, via IndexedDB si j'ai bien compris), soit qu'il puisse interagir avec la DB distante (MeteorJS ? MongoDB a aussi un ensemble d'applications annexes proposant une interface REST pour manipuler la DB). Dans le premier cas, cela signifie que le client peut "télécharger" les données, les manipuler, puis les synchroniser (et je sers essentiellement de Dropbox spécifique). Dans le 2e cas, la synchronisation se fait en temps-réel (via l'interface REST).
Il faut savoir qu'en terme de volumes, dans une db relationnelle, ça doit faire 5000 tuples environ sur 10 relations. C'est donc très léger. Niveau fréquentation/usage, je n'envisage même pas qu'il puisse y avoir plus d'une ou deux personnes simultanément. Je peux donc me permettre d'avoir une solution très simple pour stocker les données, tant qu'elle est bi-directionnelle et interrogeable directement depuis AngularJS sans avoir à écrire 30 000 lignes de code servant à faire le pont entre les 2 technos.