Que sont les Live Queries en temps réel ?

Mis à jour : septembre 2026

Une live query est un abonnement à une requête de base de données : le serveur pousse les événements create, update et delete des lignes correspondantes. C’est le temps verbal qui manquait à l’accès aux données : les requêtes normales parlent au passé (« ce qui correspondait quand j’ai demandé »), les live queries parlent au présent continu (« ce qui correspond, au fur et à mesure que ça change »). L’écran cesse de demander et se met à rester à jour.

Points clés

QuestionRéponse
Ce que c’estUne requête permanente — abonnez-vous une fois, recevez chaque changement de ses résultats
Les cinq événementscreate · update · delete · enter · leave
Sous le capotChange stream de la base de données → matching de prédicats → push WebSocket
vs. le pollingLatence temps réel, payloads de la taille du delta, aucune charge de requête par intervalle
vs. les sockets brutsLa couche de requêtes : matching, événements typés, permissions, reconnexions

L’abonnement, en code

Le geste qui définit tout — prenez la requête que vous aviez déjà, et abonnez-vous à elle :

// JavaScript / Node.js — Back4app JS SDK
// A live query: subscribe to a QUERY and receive its changes as events
const query = new Parse.Query('Task');
query.equalTo('assignee', currentUser);

const sub = await query.subscribe();
sub.on('create', (t) => addRow(t));       // new match appeared
sub.on('update', (t) => refreshRow(t));   // a match changed
sub.on('enter',  (t) => addRow(t));       // edited INTO the result set
sub.on('leave',  (t) => removeRow(t));    // edited OUT of the result set
sub.on('delete', (t) => removeRow(t));    // a match was deleted

Le vocabulaire des événements mérite son tableau, car enter et leave sont ce qui fait de ceci un abonnement à une requête plutôt qu’une notification de table :

ÉvénementSe déclenche quand…Exemple (abonné à « tâches qui me sont assignées »)
createUn nouvel enregistrement correspondUne tâche est créée pour vous
updateUn enregistrement correspondant changeLe statut de votre tâche bascule
enterUne modification fait correspondre un enregistrement existantUne tâche vous est réattribuée
leaveUne modification fait cesser une correspondanceVotre tâche est réattribuée à quelqu’un d’autre
deleteUn enregistrement correspondant est suppriméLa tâche est supprimée

Le pipeline derrière le push

Comment fonctionnent les live queries de bout en boutLes écritures de la base de données alimentent un change stream ; un serveur d'abonnements confronte chaque changement aux prédicats de requête enregistrés et pousse des événements typés par WebSockets vers les clients abonnés, avec des permissions vérifiées par abonné.

push WebSocket

push WebSocket

Écritures
(n'importe quel client, n'importe quelle API)

Base de données

Change stream
(oplog / WAL / triggers)

Serveur d'abonnements
matching de prédicats + vérification ACL

Abonné A

Abonné B

Les écritures de la base de données alimentent un change stream ; un serveur d'abonnements confronte chaque changement aux prédicats de requête enregistrés et pousse des événements typés par WebSockets vers les clients abonnés, avec des permissions vérifiées par abonné.

Deux moitiés, proprement séparables : la source de changements — le flux d’écritures de la base de données elle-même (change streams dans les stores documentaires, logs de réplication ailleurs) — et la couche de matching, qui confronte chaque changement à chaque prédicat enregistré et pousse vers exactement les abonnés dont les résultats ont changé, permissions appliquées par abonné. Le protocole ouvert LiveQuery est une implémentation de référence lisible de toute cette forme.

Live queries vs. polling vs. SSE vs. WebSockets

ApprocheLatencePayloadCoût serveurCe que vous construisez
PollingIntervalle de pollRe-téléchargement complet à chaque foisRequêtes × clients × fréquenceTimers, diffing
Long pollingQuasi temps réelRéponse complète par événementConnexions maintenuesTuyauterie de repli
SSETemps réelDeltaFlux, à sens uniqueConception des événements
WebSockets brutsTemps réelCe que vous définissezConnexions + votre fan-outTout
Live queriesTemps réelÉvénements par changementMatching + connexions (géré)La requête

La dernière colonne est l’argument : avec des sockets bruts vous construisez le protocole de messages, le routage, les vérifications de permissions et le rattrapage après reconnexion ; avec les live queries, le prédicat est le protocole et la plateforme possède le reste.

Cas d’usage courants

  • Chat et boîtes de réception — abonnez-vous aux messages de la conversation ; l’arrivée est un événement, pas un rafraîchissement.
  • Dashboards en direct — commandes, métriques, flottes : la requête définit la vue, les événements la maintiennent vraie.
  • Applications collaboratives — tableaux de tâches et documents partagés où les modifications de cinq personnes s’entremêlent en quelques secondes.
  • Présence et statut — qui est en ligne, ce qui est en cours — enter/leave font là leur travail de précision.
  • Écrans opérationnels — consoles de support et vues d’administration qui doivent refléter la production maintenant, pas au dernier rafraîchissement.

Poller, pousser ou s’abonner ? Matrice de décision

Choisissez les live queries quand…Des outils plus simples suffisent quand…
Les utilisateurs regardent des données partagées et changeantesLes données changent rarement — pollez doucement ou rechargez au retour de focus
Les changements viennent de nombreux auteurs et cheminsUn seul auteur pourrait simplement pousser via SSE
La vue est naturellement une requêteLe message n’a pas la forme de données (utilisez les sockets directement)
Les permissions doivent filtrer ce que chaque spectateur voitTout est diffusion publique
Vous préféreriez ne pas posséder l’infrastructure de fan-outVous exploitez déjà une plateforme temps réel

La discipline côté client qui garde les abonnements en bonne santé, quel que soit votre choix : abonnez-vous étroitement (des prédicats sélectifs sur des champs indexés), et désabonnez-vous quand l’écran se ferme — les requêtes permanentes sont de l’état serveur, et les écrans qui les laissent fuir accumulent un coût invisible.

Limites et trade-offs

  • Le matching est une vraie charge de travail. Chaque écriture est confrontée aux prédicats enregistrés ; des milliers d’abonnements larges sur des classes très sollicitées le multiplient — la sélectivité est le levier.
  • Les connexions sont de l’état. La flotte de sockets a besoin d’affinité, de heartbeats et de backplanes de fan-out — les plateformes gérées existent précisément parce que c’est du travail lourd et indifférencié.
  • Les reconnexions exigent un rattrapage. Un client qui était hors ligne a manqué des événements ; les flux robustes ré-exécutent la requête de base au réabonnement au lieu de supposer que rien ne s’est passé pendant la coupure.
  • L’ordre et la livraison relèvent de l’at-least-once. Des handlers d’événements idempotents (appliquer par ID d’objet, pas par ajout) absorbent élégamment le doublon occasionnel.
  • Tout ne réclame pas un abonnement. Des données rarement consultées et rarement modifiées sont le territoire du polling ; les live queries méritent leur coût là où les regards et les écritures sont tous deux fréquents.

Live queries sur Back4app

Back4app est une plateforme open-source de Backend as a Service (BaaS) qui combine une base de données gérée, des API REST et GraphQL générées automatiquement, l’authentification, le stockage de fichiers et des fonctions serverless avec Cloud Code. Live Query en est la couche temps réel, et les onglets de code ci-dessus sont toute l’histoire côté client : le même query builder que vous utilisez déjà, un seul appel d’abonnement, cinq événements typés — avec des ACL vérifiées par abonné pour que le temps réel ne contourne jamais le modèle de permissions, et la flotte de WebSockets, les change streams et le fan-out qui tournent comme une infrastructure gérée. Activez Live Query sur une classe dans le dashboard, abonnez-vous depuis n’importe quel SDK, et le présent continu devient une fonctionnalité, pas un projet.

Questions fréquentes

Qu'est-ce qu'une live query ?

Un abonnement permanent à une requête de base de données : au lieu de demander une fois et d'obtenir un instantané, vous vous abonnez à la requête et le serveur pousse un événement chaque fois que son ensemble de résultats change — un enregistrement correspondant créé, mis à jour, supprimé, ou modifié de façon à entrer dans les résultats ou à en sortir. Votre écran cesse de faire du polling et se met à écouter.

En quoi une live query diffère-t-elle d'une requête normale ?

Par la durée de vie. Une requête normale s'exécute, renvoie, et c'est fini — sa réponse commence à vieillir immédiatement. Une live query reste enregistrée sur le serveur : les résultats initiaux arrivent de la même manière, puis des événements de changement ciblés les tiennent à jour jusqu'à ce que vous vous désabonniez. Le même langage de prédicats, la relation inverse avec le temps.

Comment fonctionnent les live queries sous le capot ?

Deux moitiés jointes : une source de changements et un transport. La base de données émet son flux d'écritures — via des change streams, des logs de réplication ou des triggers — et un serveur d'abonnements confronte chaque changement aux prédicats de requête enregistrés, en poussant les événements pertinents vers les abonnés par WebSockets. Le SDK client encapsule le cycle de vie du socket pour que votre code ne voie que des événements typés.

Que sont les événements enter et leave ?

La paire subtile qui rend les abonnements aux requêtes précis. Enter se déclenche quand un enregistrement existant est modifié et se met à correspondre à votre prédicat ; leave, quand une modification le fait cesser de correspondre. Une tâche qui vous est réattribuée entre dans votre abonnement « assignées à moi » sans avoir été créée ; réattribuée à quelqu'un d'autre, elle en sort sans avoir été supprimée. Create, update et delete couvrent le reste.

Pourquoi les live queries valent-elles mieux que le polling ?

De trois façons à la fois : la latence — les changements arrivent en temps réel au lieu du prochain poll ; la bande passante — les événements ne transportent que ce qui a changé au lieu de tout re-télécharger ; et la charge — le serveur fait un matching par changement au lieu d'exécuter des requêtes complètes par client et par intervalle. Faire du polling toutes les quelques secondes est une simulation ; les abonnements, c'est le vrai temps réel.

Qu'apportent les live queries par rapport à des WebSockets bruts ?

Le cerveau de requêtes. Un socket brut déplace des messages ; tout le reste — quels clients s'intéressent à quels changements, ce que les événements signifient, qui a le droit de voir quoi, le rattrapage après reconnexion — est du code que vous écrivez. Une couche de live queries fait le matching de prédicats côté serveur, type les événements, applique les permissions par abonné et gère le cycle de vie du socket. C'est la différence entre un transport et une fonctionnalité.

Les subscriptions GraphQL sont-elles la même chose que les live queries ?

Même famille, déclencheur différent. Les subscriptions GraphQL se déclenchent sur des événements nommés que vous définissez — une mutation publie, les abonnés reçoivent. Les live queries se déclenchent sur les changements de l'ensemble de résultats d'une requête — aucun câblage d'événements, le prédicat est l'abonnement. Les deux circulent sur WebSockets ; les live queries échangent la conception explicite des événements contre une couverture automatique de tous les chemins d'écriture.

Comment les live queries passent-elles à l'échelle ?

Sur deux axes : les connexions — des milliers de sockets ouverts répartis entre des serveurs d'abonnements derrière un backplane pub/sub — et le matching — chaque écriture confrontée aux prédicats enregistrés, ce qui explique pourquoi des abonnements sélectifs sur des champs indexés comptent. Les plateformes gérées exploitent les deux axes pour vous ; la discipline côté client consiste à s'abonner étroitement et à se désabonner quand les écrans se ferment.

Termes associés

À comparer avec

Lectures recommandées

Prêt à construire votre backend ?

Lancez votre projet sur Back4app en quelques minutes — base de données, authentification, API et Cloud Code inclus. Sans carte bancaire.

Écrit et révisé par Back4app Engineering, Back4app Engineering · Publié le 2026-09-10