Conception de table
Découvrez comment concevoir et configurer des tables dans Oracle NoSQL Database Cloud Service.
Table
Une table est un ensemble de lignes, dans lequel chaque ligne contient un enregistrement de données. Chaque ligne de table comprend des champs de clé et de données qui sont définis lors de la création d'une table. De plus, une table dispose d'une capacité de stockage spécifiée, peut prendre en charge un débit maximal de lecture et d'écriture défini, et a une taille maximale.
Découvrez les concepts suivants avant de concevoir une table dans Oracle NoSQL Database Cloud Service :
-
Champs de table : les tables sont créées à l'aide de DDL (Data Definition Language) qui définit les types de données et les clés primaires utilisées pour la table. Oracle NoSQL Database Cloud Service prend en charge plusieurs types de données, notamment plusieurs types numériques, les chaînes, les types binaires, les horodatages, les données de correspondance, les tableaux, les enregistrements et un type JSON spécial qui peut contenir des données JSON valides. Une application peut choisir les types de données pour les champs de table en fonction du modèle de données. Reportez-vous à Types de données pris en charge pour obtenir la liste complète des types de données pris en charge dans Oracle NoSQL Database Cloud Service.
Pour plus d'informations sur les champs de table, reportez-vous à Champs de table.
-
Clés primaires et clés de shard : chaque table doit comporter des champs désignés comme clé primaire. Cette désignation se fait lors de la création de la table et ne peut pas être modifiée une fois la table créée. Une clé primaire identifie chaque ligne de la table de façon unique. Dans le cas le plus simple, une clé primaire est utilisée pour extraire une ligne spécifique à examiner ou à modifier.
Les clés de shard identifient les champs de clé primaire qui sont significatifs en matière de stockage de shard. Ainsi, les lignes contenant les mêmes valeurs pour toutes les clés de shard sont nécessairement stockées sur le même shard. Ce stockage de shard est important dans le cadre de certaines opérations destinées à obtenir des résultats à caractère atomique.
Pour en savoir plus, reportez-vous à Clés primaires et clés de shard.
-
Index : les index représentent une autre méthode pour extraire des lignes de table. En temps normal, vous extrayez les lignes de la table à l'aide de la clé primaire. En créant un index, vous pouvez extraire plus efficacement des lignes en fonction de champs ne faisant pas partie de la clé primaire. Les index offrent davantage de fonctions de requête, mais consomment à la fois des ressources de stockage et de débit.
Pour découvrir comment créer un index, reportez-vous à Création de tables et d'index.
-
Capacité : lorsque vous créez une table, vous indiquez également les ressources de débit et de stockage disponibles pour cette table. Les opérations de lecture et d'écriture dans la table sont limitées par la capacité de débit de lecture et d'écriture que vous définissez. La quantité d'espace utilisable par la table est limitée par la capacité de stockage.
Pour plus d'informations sur la manière d'estimer la capacité à définir pour votre table, reportez-vous à Estimation de la capacité.
Reportez-vous à Gestion de la capacité pour découvrir comment gérer la capacité de votre table.
-
Durée de vie : la durée de vie vous permet de faire expirer automatiquement les lignes de la table. La durée de vie est exprimée sous la forme d'une durée pendant laquelle les données peuvent résider dans la table. Les données ayant atteint le délai d'expiration ne peuvent plus être extraites et n'apparaissent plus dans aucune opération de lecture.
Pour en savoir plus, reportez-vous à Durée de vie.
- Colonnes d'identité : les colonnes d'identité sont un type de colonne spécial qui obtient les valeurs automatiquement affectées par Oracle NoSQL Database Cloud Service. Ces valeurs sont générées par un générateur de séquences. Les colonnes d'identité ne sont pas prises en charge à partir de la console NoSQL Database Cloud Service. Pour plus d'informations sur les colonnes d'identité, reportez-vous à Colonne d'identité dans Référence SQL pour Oracle NoSQL Database. Pour savoir comment accéder aux colonnes d'identité d'une application Oracle NoSQL Database Cloud Service, reportez-vous à Insertion de valeurs IDENTITY par programmation dans le manuel Introduction au pilote Java de table NoSQL Database.
-
Cycles de vie de la table : lorsque les tables sont créées, modifiées ou supprimées, elles passent par différents états de cycle de vie.
Reportez-vous à Cycles de vie et états de table pour en savoir plus sur le cycle de vie d'une table.
Types de données pris en charge
Oracle NoSQL Database Cloud Service prend en charge de nombreux types de données courants.
Type de données | Description |
---|---|
|
Séquence d'aucun octet ou de plusieurs octets. |
FIXED_BINARY |
Tableau d'octets à taille fixe. |
|
Type de données avec l'une des deux valeurs possibles : |
|
Nombre à virgule flottante de 64 bits (8 octets). |
|
Nombre à partir de 32 bits (4 octets) |
|
Nombre entier de 64 bits ( 8 octets). |
|
Nombre entier de 32 bits (4 octets). |
|
Séquence de caractères Unicode. |
|
Nombre décimal signé à précision arbitraire. |
|
Point dans le temps avec une précision. La précision a une incidence sur la taille et l'utilisation du stockage. L'horodatage est stocké et géré au format UTC (Temps universel coordonné). |
|
Enumération, représentée sous forme de tableau de chaînes. Les valeurs |
|
Collection triée de zéro élément ou de plusieurs éléments saisis. Les tableaux qui ne sont pas définis au format JSON ne peuvent pas contenir de valeurs Les tableaux déclarés au format JSON peuvent contenir n'importe quelle valeur JSON valide, y compris la valeur spéciale NULL, appropriée à JSON. |
|
Ensemble non trié de zéro paire ou de plusieurs paires clé-élément, où toutes les clés sont des chaînes et tous les éléments sont du même type. Toutes les clés doivent être uniques. Les paires clé-élément sont appelées des champs, les clés sont des noms de champ et les éléments associés sont des valeurs de champ. Les valeurs de champ peuvent avoir des types différents, mais les correspondances ne peuvent pas contenir de valeurs de champ NULL. |
|
Ensemble fixe d'une ou de plusieurs paires clé-élément, où toutes les clés sont des chaînes. Toutes les clés dans un enregistrement doivent être uniques. |
|
Toutes les données JSON valides. |
Champs de table
Découvrez comment concevoir et configurer des données à l'aide de champs de table.
Une application peut choisir d'utiliser des tables sans schéma, dans lesquelles une ligne se compose de champs de clés et d'un champ de données JSON unique. Une table sans schéma offre une flexibilité quant aux éléments pouvant être stockés dans une ligne.
L'application peut également choisir d'utiliser des tables de schéma fixes dans lesquelles tous les champs de table sont définis en tant que types spécifiques.
Les tables de schéma fixe contenant des données saisies sont plus sûres du point de vue de l'application et l'efficacité du stockage. Bien que le schéma de ces tables puisse être modifié, la structure des tables ne peut pas être facilement modifiée. Une table sans schéma est flexible et la structure de la table peut être facilement modifiée.
Enfin, l'application peut également utiliser une approche de modèle de données hybride dans laquelle une table peut disposer de champs de données JSON et de données saisies.
Les exemples suivants illustrent la conception et la configuration des données pour les trois approches.
Exemple 1 : Conception d'une table sans schéma
Vous disposez de plusieurs options pour stocker des informations à propos des modèles de navigation dans votre table. L'une des options consiste à définir une table qui utilise un ID de cookie en tant que clé et qui conserve les données de segmentation de l'audience sous la forme d'un seul champ JSON.
// schema less, data is stored in a JSON field
CREATE TABLE audience_info (
cookie_id LONG,
audience_data JSON,
PRIMARY KEY(cookie_id))
Dans ce cas, la table audience_info
peut contenir un objet JSON tel que :
{
"cookie_id": "",
"audience_data": {
"ipaddr" : "10.0.00.xxx",
"audience_segment: {
"sports_lover" : "2018-11-30",
"book_reader" : "2018-12-01"
}
}
}
Votre application disposera d'un champ de clé et d'un champ de données pour cette table. Les éléments que vous choisissez de stocker en tant qu'informations dans le champ audience_data
sont flexibles. Vous pouvez donc facilement modifier les types d'informations disponibles.
Exemple 2 : Conception d'une table de schéma fixe
Vous pouvez stocker des informations sur les modèles de navigation en créant une table avec des champs déclarés plus explicitement :
// fixed schema, data is stored in typed fields.
CREATE TABLE audience_info(
cookie_id LONG,
ipaddr STRING,
audience_segment RECORD(sports_lover TIMESTAMP(9),
book_reader TIMESTAMP(9)),
PRIMARY KEY(cookie_id));
Dans cet exemple, votre table comporte un champ de clé et deux champs de données. Vos données sont plus compactes et vous pouvez vous assurer que tous les champs de données sont exacts.
Exemple 3 : Conception d'une table hybride
Vous pouvez stocker des informations sur les modèles de navigation à l'aide des champs de données saisis et des champs de données JSON dans la table.
// mixed, data is stored in both typed and JSON fields.
CREATE TABLE audience_info (
cookie_id LONG,
ipaddr STRING,
audience_segment JSON,
PRIMARY KEY(cookie_id));
Clés primaires et clés de shard
Découvrez l'objectif des clés primaires et des clés de shard pendant la conception de l'application.
Les clés primaires et les clés de shard sont des éléments importants dans le schéma. Elles vous aident à accéder aux données et à les distribuer efficacement. Vous créez des clés primaires et des clés de shard uniquement lorsque vous créez une table. Elles sont conservées pendant toute la durée de vie de la table et ne peuvent être ni modifiées ni supprimées.
Clés primaires
Vous devez désigner des colonnes de clé primaire lors de la création de la table. Une clé primaire identifie chaque ligne de la table de façon unique. Pour les opérations CRUD simples, Oracle NoSQL Database Cloud Service utilise la clé primaire pour extraire une ligne spécifique à lire ou à modifier. Par exemple, supposons qu'une table comporte les champs suivants :
-
productName
-
productType
-
productLine
D'expérience, vous savez que le nom du produit est important et qu'il est unique pour chaque ligne. Vous devez donc définir productName
comme clé primaire. Ensuite, vous extrayez les lignes qui vous intéressent en fonction de productName
. Dans un tel cas, utilisez une instruction semblable à celle-ci pour définir la table.
/* Create a new table called users. */
CREATE TABLE if not exists myProducts
(
productName STRING,
productType STRING,
productLine INTEGER,
PRIMARY KEY (productName)
)";
Clés de shard
Le principal objectif des clés de shard est de distribuer des données dans le cluster Oracle NoSQL Database Cloud Service pour améliorer l'efficacité, et de placer des enregistrements qui partagent la clé de shard localement pour faciliter l'accès et le référencement. Les enregistrements partageant la clé de shard sont stockés dans le même emplacement physique, et vous pouvez y accéder de manière atomique et efficace.
La conception des clés primaires et de shard a des conséquences sur l'ajustement et l'atteinte du débit provisionné. Par exemple, lorsque des enregistrements partagent des clés de shard, vous pouvez supprimer plusieurs lignes de table en une opération atomique, ou extraire un sous-ensemble de lignes dans votre table en une seule opération atomique. En plus de permettre l'évolutivité, des clés de shard bien conçues peuvent améliorer les performances car elles exigent moins de cycles pour mettre en place des données ou obtenir des données à partir d'un seul shard.
Par exemple, supposons que vous désignez trois champs de clé primaire :
PRIMARY KEY (productName, productType, productLine)
Vous savez que votre application effectue fréquemment des requêtes à l'aide des colonnes productName
et productType
. Vous pouvez donc indiquer ces champs comme clés de shard. La désignation de clé de shard garantit que toutes les lignes de ces deux colonnes sont stockées sur le même shard. Si ces deux champs ne sont pas des clés de shard, les colonnes les plus fréquemment interrogées peuvent être stockées sur n'importe quel shard. Ensuite, la localisation de toutes les lignes pour les deux champs nécessite l'analyse de l'ensemble du stockage de données, plutôt que d'un seul shard.
Si vous ne désignez pas de clés de shard lors de la création d'une table, Oracle NoSQL Database Cloud Service utilise les clés primaires pour l'organisation de shard.
Facteurs importants à prendre en compte lors du choix d'une clé de shard
-
Cardinalité : des champs de cardinalité faible, tels qu'un pays de résidence d'utilisateur, regroupent les enregistrements sur quelques shards. A leur tour, ces shards nécessitent un rééquilibrage fréquent des données, ce qui augmente la probabilité des problèmes de shard à chaud. En revanche, chaque clé de shard doit avoir une cardinalité élevée, où la clé de shard peut exprimer une tranche égale d'enregistrements dans l'ensemble de données. Par exemple, les numéros d'identité comme
customerID
,userID
ouproductID
sont de bons candidats pour une clé de shard. -
Atomicité : seuls les objets partageant la clé de shard peuvent participer à une transaction. Si vous avez besoin de transactions ACID qui couvrent plusieurs enregistrements, choisissez une clé de shard qui vous permet de répondre à cette exigence.
Quelles sont les meilleures pratiques à suivre ?
-
Distribution uniforme des clés de shard : lorsque les clés de shard sont distribuées uniformément, aucun shard unique ne limite la capacité du système.
-
Isolement de requête : les requêtes doivent être ciblées sur un shard spécifique afin d'optimiser l'efficacité et les performances. Si les requêtes ne sont pas isolées sur un seul shard, la requête est appliquée à tous les shards, ce qui les rend moins efficaces et augmente leur latence.
Reportez-vous à Création de tables et d'index pour découvrir comment affecter des clés primaires et des clés de shard à l'aide de l'objet TableRequest
.
Durée de vie
Découvrez comment indiquer un délai d'expiration pour les tables et les lignes à l'aide de la fonctionnalité Durée de vie.
De nombreuses applications gèrent des données qui ont une durée de vie utile limitée. La durée de vie est un mécanisme qui vous permet de définir sur les lignes de la table une période après laquelle les lignes expirent automatiquement et ne sont plus disponibles. Il s'agit de la durée pendant laquelle les données sont autorisées à rester dans Oracle NoSQL Database Cloud Service. Les données qui atteignent le délai d'expiration ne peuvent plus être extraites et n'apparaissent dans aucune statistique de stockage.
Par défaut, la valeur de durée de vie de chaque table que vous créez est zéro, ce qui indique l'absence de délai d'expiration. Vous pouvez déclarer une valeur de durée de vie lorsque vous créez une table, en indiquant un nombre, suivi de HOURS
ou DAYS
. Les lignes de table héritent de la valeur de durée de vie de la table dans laquelle elles résident, sauf si vous définissez explicitement une valeur de durée de vie pour les lignes de table. La définition de la valeur de durée de vie d'une ligne remplace la valeur de durée de vie de la table. Si vous modifiez la valeur de durée de vie de la table une fois que la ligne a une valeur de durée de vie, la valeur de durée de vie de la ligne est conservée.
Vous pouvez mettre à jour la valeur de durée de vie d'une ligne de table à tout moment avant que la ligne n'atteigne le délai d'expiration. Les données arrivées à expiration ne sont plus accessibles. Par conséquent, l'utilisation de valeurs de durée de vie est plus efficace que la suppression manuelle de lignes, car le temps système de l'écriture d'une entrée de journal de base de données pour la suppression de données est évité. Les données arrivées à expiration sont purgées du disque après la date d'expiration.
Cycles de vie et états de table
Découvrez les différents états de table et leur signification (processus de cycle de vie des tables).
Chaque table passe par une série d'états différents de sa création à sa suppression. Par exemple, une table avec l'état DROPPING
ne peut pas passer à l'état ACTIVE
, tandis qu'une table à l'état ACTIVE
peut passer à l'état UPDATING
. Vous pouvez suivre les différents états d'une table en surveillant son cycle de vie. Cette section décrit les différents états d'une table.
Etat de la table | Description |
---|---|
|
La table est en cours de création. Elle n'est pas encore prête à l'emploi. |
|
La table est en cours de mise à jour. Vous ne pouvez pas apporter d'autres modifications à la table tant qu'elle est dans cet état. Une table a l'état
|
|
La table peut être utilisée lorsqu'elle est dans cet état. La table a peut-être été récemment créée ou modifiée, mais son état est désormais stable. |
|
La table est en cours de suppression et n'est pas accessible. |
|
La table a été supprimée et n'existe plus pour les activités de lecture, d'écriture ou de requête.
Remarque
Une fois supprimée, vous pouvez recréer une table du même nom. |