[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/API/IndexedDB_API/Basic_Terminology [Back]  [Original]

Caractristiques cls et terminologie d'IndexedDB - Les API Web | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

Caractristiques cls et terminologie d'IndexedDB

Dans cet article, nous verrons les caractristiques fondamentales d'IndexedDB et introduirons certains termes qui permettent de comprendre cette API.

Ces autres articles sur le sujet peuvent galement tre utiles :

Dans cet article

Caractristiques fondamentales

IndexedDB permet de stocker des donnes dans le navigateur de faon persistante. En permettant aux applications web d'excuter des requtes sur des donnes de faon complexe quelle que soit la connectivit rseau, elle permet aux applications de fonctionner en ligne et hors ligne. IndexedDB est utile pour stocker un grand volume de donnes (par exemple, le catalogue de livres d'une bibliothque) et pour les applications qui doivent pouvoir fonctionner sans accs internet (par exemple des clients mail, des listes de tches, des blocs-notes).

IndexedDB permet de stocker et de rcuprer des objets qui sont indexs avec une  cl . Tous les changements appliqus la base de donnes sont effectus au sein de transactions. Comme la plupart des techniques de stockage web, IndexedDB utilise une rgle d'origine identique. Ainsi, on peut stocker des donnes pour un domaine donn, mais on ne peut pas accder aux donnes d'autres domaines.

Si vous avez l'habitude de travailler avec d'autres types de base de donnes, IndexedDB pourrait vous dconcerter. Voici les caractristiques fondamentales d'IndexedDB qu'il faut garder l'esprit :

  • Les bases de donnes IndexedDB stockent des paires de cl/valeur

    • : Les valeurs peuvent tre des objets structurs complexes et les cls peuvent tre des proprits de ces objets. On peut crer des index qui utilisent n'importe quelle proprit des objets pour des recherches rapides ou des numrations tries. Les cls peuvent tre des objets binaires.
  • IndexedDB est construit sur un modle de base de donnes transactionnel

    • : Tout ce qui se produit dans une base de donnes IndexedDB a lieu dans le contexte d'une transaction. L'API IndexedDB fournit de nombreux objets qui reprsentent des index, des tables, des curseurs, etc. et chacun de ces objets est li une transaction donne. On ne peut pas excuter de commandes ou ouvrir des curseurs en dehors d'une transaction. Les transactions disposent d'une dure de vie bien dfinie et toute tentative d'utiliser une transaction aprs qu'elle a termine se soldera par des exceptions. Par ailleurs, les transactions sont appliques avec des commits automatiques et on ne peut pas raliser de commit manuel.

    Ce modle de transaction s'avre vraiment utile lorsqu'on pense au cas d'usage o une personne a ouvert simultanment deux instances d'une application web dans deux onglets diffrents. Sans oprations transactionnelles, les deux instances pourraient interfrer l'une avec l'autre. Si vous ne connaissez pas le concept de transaction pour les bases de donnes, nous vous conseillons de lire l'article Wikipdia sur les transactions et de poursuivre avec la sous-section transaction de cette page, dans la section Dfinitions.

  • IndexedDB API utilise des oprations asynchrones la plupart du temps

    • : Cette API ne fournit pas les donnes sous forme de valeurs de retour. la place, elle utilise des fonctions de rappel. On ne stocke pas directement de valeur dans la base de donnes ou on ne rcupre pas directement une valeur de la base de donnes avec des oprations synchrones. la place, on demande ce qu'une opration ait lieu ; on reoit une notification avec un vnement DOM lorsque l'opration est termine et c'est le type d'vnement reu qui permet de savoir si l'opration a chou ou russi. Cela peut sembler un peu compliqu premire vue, mais ce sont des mesures de protection qui font partie de l'API. D'une certaine faon, le fonctionnement de cette API n'est pas si diffrent de celle d'XMLHttpRequest.
  • IndexedDB utilise de nombreuses requtes

    • : Les requtes sont des objets qui reoivent les vnements DOM de russite ou d'chec mentionns avant. Elles ont des proprits onsuccess et onerror sur lesquelles on peut appeler addEventListener() et removeEventListener(). Elles disposent galement de proprits readyState, result, et errorCode qui indiquent le statut de la requte. La proprit result peut reprsenter diffrentes choses selon la faon dont la requte a t gnre (a peut par exemple tre une instance IDBCursor ou encore la cl d'une valeur qu'on vient d'insrer en base de donnes).
  • IndexedDB utilise les vnements du DOM pour notifier de la disponibilit des rsultats

    • : Les vnements du DOM ont toujours une proprit type (pour IndexedDB, celle-ci vaudra le plus souvent "success" ou "error"). Les vnements DOM possdent galement une proprit target qui indique la destination de l'vnement. Dans la plupart des cas, la proprit target d'un vnement sera ici l'objet IDBRequest qui a t gnr comme rsultat d'une opration sur la base de donnes. Les vnements de russite ne bouillonnent pas vers la surface et ne peuvent tre annuls. En revanche, les vnements d'erreur bouillonnent vers la surface et peuvent tre annuls. Cette nuance a son importance, car les vnements d'erreur interrompent toute transaction dont ils faisaient partie, moins qu'ils soient annuls.
  • IndexedDB est oriente objets

    • : IndexedDB n'est pas une base de donnes relationnelle avec des tableaux qui reprsentent des ensembles de lignes et de colonnes. Cette diffrence majeure et fondamentale aura un impact sur la faon de concevoir et de construire vos applications.

    Dans un magasin de donnes relationnel traditionnel, on aurait une table qui stocke un ensemble de lignes et des colonnes avec des types, nommes pour les diffrentes donnes. Avec IndexedDB, il faut crer un magasin d'objets pour un type de donnes et y faire persister des objets JavaScript. Chaque magasin d'objet peut avoir un ensemble d'index qui permettent des recherches et des parcours rapides. Si vous ne connaissez pas les systmes de gestion de bases de donnes orientes objet, nous vous invitons lire l'article Wikipdia correspondant.

  • IndexedDB n'utilise pas le langage SQL

    • : Cette API utilise des requtes sur un index, qui produisent un curseur qu'on utilise pour parcourir l'ensemble des rsultats. Si vous ne connaissez pas les systmes NoSQL, nous vous invitons lire l'article Wikipdia correspondant.
  • IndexedDB suit la rgle d'origine unique

    • : Une origine se compose du domaine, du protocole de l'application et du port de l'URL du document o le script est excut. Chaque base de donnes est associe une seule origine et chaque origine peut avoir plusieurs bases de donnes. Chaque base de donnes possde un nom qui permet de l'identifier pour une origine donne.

    Cette rgle de scurit qui porte sur IndexedDB empche les applications d'accder aux donnes des autres origines. Ainsi, bien qu'une application ou une page situe sur http://www.example.com/app/ puisse rcuprer des donnes propos de http://www.example.com/dir/, car elles partagent la mme origine ; elle ne peut pas rcuprer des donnes provenant de http://www.example.com:8080/dir/ (le port est diffrent) ou de https://www.example.com/dir/ (le protocole est diffrent), car les origines sont diffrentes.

    Note : Le contenu tiers d'une fentre (par exemple celui d'une <iframe>) peut accder au magasin IndexedDB de l'origine dans laquelle il est embarqu, moins que le navigateur soit paramtr pour ne jamais accepter les cookies tiers (voir le bug 1147821).

Limitations

IndexedDB est conu pour la plupart des cas d'usage de stockage ct client. Toutefois, cette API n'est pas conue pour rpondre aux scnarios :

Le tri de chanes de caractres localis/internationalis

Toutes les langues ne trient pas les chanes de caractres dans le mme ordre. Bien qu'une base de donnes IndexedDB ne puisse pas stocker des donnes selon un ordre internationalis, il est toujours possible de trier les donnes aprs les avoir rcupres (voir Intl.Collator).

La synchronisation

Cette API n'est pas conue pour la synchronisation avec une base de donnes serveur. Il faudra crire du code en plus pour synchroniser une base client IndexedDB avec une base de donnes sur un serveur.

Recherche sur le texte

Cette API ne dispose pas d'un quivalent l'oprateur LIKE prsent en SQL.

De plus, il faut avoir conscience que le navigateur peut se dbarrasser de la base de donnes dans certaines conditions :

  • Parce que la personne a demand une suppression des donnes (la majorit des navigateurs possde des rglages qui permettent de supprimer l'ensemble des donnes stockes pour un site web donn, que ce soit les cookies, les marque-pages, les mots de passe enregistrs ou les donnes IndexedDB).
  • Parce que le navigateur est utilis en navigation prive/incognito. la fin d'une telle session, les informations de navigation, dont le contenu des bases de donnes IndexedDB, seront supprimes.
  • Parce que la limite d'espace disque ou de quota allou a t atteinte.
  • Parce que les donnes sont corrompues.
  • Parce qu'une modification incompatible a t apporte la fonctionnalit.

Les conditions exactes et les comportements des navigateurs pourront varier avec le temps, mais la philosophie gnrale des diteurs de navigateur est de faire le maximum pour garder les donnes disponibles autant que possible.

Terminologie

Dans cette section, on dfinit et on explique les termes spcifiques l'API IndexedDB.

Base de donnes

Base de donnes (database en anglais)

Un dpt d'informations, gnralement compos d'un ou plusieurs magasins d'objets. Chaque base de donnes doit avoir :

Un nom

Il identifie la base de donnes pour une origine donne et il reste constant pendant la dure de vie de la base de donnes. Le nom peut tre n'importe quelle chane de caractres (y compris la chane vide).

Un numro de version courante

Lorsqu'une base de donnes est initialement cre, son numro de version est 1 si aucune autre valeur n'est fournie. Chaque base de donnes ne peut avoir qu'une seule version un instant donn.

Connexion la base de donne

Une opration cre lorsqu'on ouvre une base de donnes. On peut avoir plusieurs connexions ouvertes pour une mme base de donnes un instant donn.

Index

Un index est un magasin d'objet spcialis dans la recherche d'enregistrements d'un autre magasin d'objets, appel le magasin d'objets rfrenc. L'index est un stockage persistant de cl/valeur o la valeur de l'enregistrement correspond la cl de l'enregistrement dans le magasin d'objets rfrenc. Les enregistrements d'un index sont automatiquement remplis lorsque des enregistrements sont insrs, mis jour ou supprims dans le magasin d'objets rfrenc. Chaque enregistrement d'un index ne peut pointer que vers un seul enregistrement du magasin d'objets rfrenc. En revanche, plusieurs index peuvent rfrencer le mme magasin d'objets. Lorsque le magasin d'objets change, tous les index qui rfrencent ce magasin sont automatiquement mis jour.

Il est aussi possible de rechercher parmi les enregistrements d'un magasin d'objets en utilisant la cl.

Pour en savoir plus sur l'utilisation des index, voir l'article Utiliser IndexedDB. Pour la documentation de rfrence propos des index, voir IDBKeyRange.

Magasin d'objets (object store en anglais)

Il s'agit du mcanisme avec lequel les donnes sont stockes dans la base de donnes. Le magasin d'objets contient les enregistrements (des paires de cl/valeur) de faon persistante. Les enregistrements d'un magasin d'objets sont tris selon leur cl, dans l'ordre croissant.

Chaque magasin d'objets doit avoir un nom unique au sein d'une base de donnes. Un magasin d'objet peut aussi avoir, optionnellement, un gnrateur de cl et un chemin de cl. Si le magasin d'objets a un chemin de cl, il utilise des cls en ligne et sinon il utilise des cls hors ligne.

Pour la documentation de rfrence sur les magasins d'objets, voir IDBObjectStore.

Requte

L'opration grce laquelle on lit ou on crit des donnes en base de donnes. Chaque requte reprsente une opration de lecture ou d'criture.

Transaction

Un ensemble atomique d'oprations d'accs ou de modification des donnes pour une base de donnes distincte. C'est le mcanisme par lequel on interagit avec les donnes d'une base de donnes. Toute lecture ou modification d'une donne de la base de donnes doit avoir lieu au sein d'une transaction.

Une connexion une base de donnes peut avoir plusieurs transactions actives un moment donn tant que les transactions en critures n'utilisent pas de portes qui se chevauchent. La porte d'une transaction est dfinie sa cration et dtermine quels sont les magasins de donnes avec lesquels elle interagit et ceux qui restent constants le temps de la transaction. Ainsi, si une connexion une base de donnes a dj ouvert une transaction d'criture qui porte sur le magasin d'objets singesVolants, il est possible d'ouvrir une deuxime transaction dont la porte serait les magasins d'objets licornesCentaures et licornesPegases. En ce qui concerne les transactions en lecture, il est possible d'en avoir plusieurs, mme si leurs portes se chevauchent.

Les transactions sont censes avoir une dure de vie courte. Le navigateur pourra donc interrompre une transaction qui dure trop longtemps afin de librer les ressources monopolises par une transaction trop longue. Il est possible d'annuler une transaction, ce qui annule les modifications apportes par le dbut de la transaction. Il n'est mme pas ncessaire d'attendre que la transaction ait dmarr ou soit active pour l'interrompre.

Il existe trois modes de transaction : readwrite, readonly, et versionchange. La seule faon de crer et de supprimer des magasins d'objets et des index consiste utiliser une transaction versionchange. Pour en savoir plus sur les types de transaction, voir l'article de rfrence sur IndexedDB.

Comme tout se produit au sein d'une transaction, il s'agit d'un concept majeur pour IndexedDB. Pour en savoir plus sur les transactions et leurs relations avec les versions, voir la documentation de rfrence pour IDBTransaction.

Version

Lorsqu'une base de donnes est cre, sa version est le nombre entier 1. Une base de donnes a une version un instant donn et ne peut pas exister avec plusieurs versions simultanes. La seule faon de changer sa version consiste l'ouvrir avec une version plus grande que la version courante.

Cl et valeur

Cl en ligne (in-line key en anglais)

Une cl qui est stocke comme une partie de la valeur stocke. Elle est trouve en utilisant un chemin de cl. Une cl en ligne peut galement tre gnre avec un gnrateur. Une fois la gnration effectue, elle peut alors tre stocke dans la valeur en utilisant le chemin de cl ou tre utilise comme une cl.

Cl

Une donne selon laquelle les valeurs stockes sont organises et par laquelle on peut les rcuprer d'un magasin de donnes. Le magasin d'objets peut driver la cl de trois sources : un gnrateur de cl, un chemin de cl, ou une valeur fournie explicitement. Chaque enregistrement contenu dans un magasin d'objets doit avoir une cl qui lui est unique au sein de ce magasin et il n'est donc pas possible d'avoir plusieurs enregistrements avec la mme cl dans un magasin d'objets donn.

Une cl peut avoir l'un des types suivants :

  • Chane de caractres,
  • Date,
  • Nombre flottant
  • Blob binaire
  • Tableau. Dans ce cas, la cl peut aller d'une valeur vide l'infini. Il est aussi possible d'avoir des tableaux inclus dans un tableau.

Il est aussi possible d'accder aux enregistrements d'un magasin d'objets en utilisant les index.

Gnrateur de cl

Un mcanisme qui permet de produire de nouvelles cls de faon ordonne. Si un magasin d'objets ne possde pas de gnrateur de cl, l'application doit alors fournir des cls pour les enregistrements qui sont stocks. Les gnrateurs ne sont pas partags entre les magasins d'objets. Il s'agit ici plutt d'un dtail qui relve de l'implmentation des navigateurs, en pratique, on n'a pas rellement besoin de crer ou d'accder des gnrateurs de cl.

Chemin de cl

Il dfinit l'emplacement auquel le navigateur devrait extraire la cl du magasin d'objets ou de l'index. Un chemin de cl valide peut inclure un des lments suivants :

  • Une chane de caractres vide
  • Un identifiant JavaScript
  • Plusieurs identifiants JavaScript spars par des points
  • Un tableau contenant de telles valeurs

Un chemin de cl ne peut pas contenir d'espaces.

Cl hors-ligne (out-of-line key en anglais)

Une cl qui est stocke sparment de la valeur enregistre.

Valeur

Chaque enregistrement a une valeur. Il peut s'agir de n'importe quelle valeur qui peut tre exprime en JavaScript :

Lorsqu'un objet ou un tableau est enregistr, les proprits et valeurs de cet objet ou de ce tableau peuvent galement tre n'importe quelle valeur valide.

Il est aussi possible de stocker des blobs et des fichiers (voir la spcification).

Intervalle et porte

Curseur

Un mcanisme qui permet d'itrer sur plusieurs enregistrements situs sur un intervalle de cls. Le curseur a une source qui indique l'index ou le magasin qu'il parcourt. Il a aussi une position au sein de l'intervalle et il se dplace dans une direction croissante ou dcroissante de l'ordre des cls des enregistrements.

Pour la documentation de rfrence sur les curseurs, voir IDBCursor.

Intervalle de cls

Un intervalle continu sur un type de donnes utilis pour les cls. Les enregistrements peuvent tre rcuprs d'un magasin d'objets ou d'un index grce des cls ou grce des intervalles de cls. Il est possible de limiter ou de filtrer l'intervalle en utilisant des bornes infrieures et suprieures. Ainsi, on pourra parcourir l'ensemble des valeurs dont la cl est comprise entre x et y.

Pour la documentation de rfrence sur les intervalles de cls, voir IDBKeyRange.

Porte

L'ensemble de magasins d'objets et d'index sur lequel une transaction s'applique. Pour les transactions en lecture seule, il peut y avoir un chevauchement des portes lors de leur excution. En revanche, les portes des transactions en criture ne peuvent pas se chevaucher. Il est toujours possible de dmarrer plusieurs transactions qui concernent la mme porte au mme moment, mais celles-ci s'empileront et seront excutes l'une aprs l'autre.

Prochaines tapes

En comprenant les caractristiques fondamentales d'IndexedDB et les termes qui lui sont associs, nous pouvons dsormais aborder des sujets plus concrets. Pour un tutoriel qui explique comment utiliser l'API, voir l'article Utiliser IndexedDB.

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page