Référence Oracle NoSQL Database Cloud Service

Découvrez les types de données pris en charge, les instructions DDL, les paramètres et mesures d'Oracle NoSQL Database Cloud Service.

Cet article comprend les rubriques suivantes :

Types de données pris en charge

Oracle NoSQL Database Cloud Service prend en charge de nombreux types d'informations courants.

Type de données Description
BINARY Séquence d'aucun octet ou de plusieurs octets. La taille de stockage est le nombre d'octets plus un codage de la taille de la baie d'octets, qui est une variable, en fonction de la taille de la baie.
FIXED_BINARY Tableau d'octets à taille fixe. Il n'y a pas de surcharge de codage supplémentaire pour ce type de données.
BOOLEAN Type de données avec l'une des deux valeurs possibles : TRUE ou FALSE. La taille de stockage de l'objet boolean est de 1 octet.
DOUBLE Nombre long à virgule flottante, codé en utilisant 8 octets de stockage pour les clés d'index. S'il s'agit d'une clé primaire, elle utilise 10 octets de stockage.
FLOAT Nombre long à virgule flottante, codé à l'aide de 4 octets de stockage pour les clés d'index. S'il s'agit d'une clé primaire, elle utilise 5 octets de stockage.
LONG Un nombre entier long a un codage de longueur variable qui utilise de 1 à 8 octets de stockage en fonction de la valeur. S'il s'agit d'une clé primaire, elle utilise 10 octets de stockage.
INTEGER Un nombre entier long a un codage de longueur variable qui utilise 1 à 4 octets de stockage en fonction de la valeur. S'il s'agit d'une clé primaire, elle utilise 5 octets de stockage.
STRING Séquence de zéro ou plusieurs caractères Unicode. Le type String est codé en UTF-8 et stocké dans ce codage. La taille de stockage est le nombre d'octets UTF-8 plus la longueur, qui peut être de 1 à 4 octets en fonction du nombre d'octets dans l'encodage. Lorsqu'elle est stockée dans une clé d'index, la taille de stockage est le nombre d'octets UTF-8 plus un seul octet de terminaison NULL.
NUMBER Nombre décimal signé de précision arbitraire.

Il est sérialisé dans un format de tableau d'octets qui peut être utilisé pour les comparaisons ordonnées. Le format comporte 2 parties :

1. Le signe et l'exposant plus un seul chiffre. Cela prend de 1 à 6 octets mais est normalement de 2, sauf si l'exposant est assez grand
2. Le mantissa de la valeur qui est d'environ un octet pour tous les 2 chiffres

Exemples :

12.345678 sérialise en 6 octets

1.234E+102 sérialise en 5 octets

Remarque : Lorsque vous devez utiliser des valeurs numériques dans votre schéma, il Il est recommandé de décider des types de données dans l'ordre indiqué ci-dessous : INTEGER, LONG, FLOAT, DOUBLE, NUMÉRO Évitez NUMÉRO sauf si vous en avez vraiment besoin pour votre cas d'utilisation car NUMÉRO est coûteux en termes de puissance de stockage et de traitement utilisée.
TIMESTAMP 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é). Le type de données Timestamp nécessite de 3 à 9 octets selon la précision utilisée.

La ventilation suivante illustre le stockage utilisé par ce type de données :

- bit[0~13] année - 14 bits
- bit[14~17] mois - 4 bits
- bit[18~22] jour - 5 bits
- bit[23~27] heure - 5 bits [facultatif]
- bit[28~33] minute - 6 bits [facultatif]
- bit[34~39] seconde - 6 bits [facultatif]
- bit[40~71] seconde fractionnaire [facultatif avec longueur variable]
UUID Remarque : Le type de données UUID est considéré comme un sous-type du type de données STRING. La taille de stockage est de 16 octets en tant que clé d'index. Si elle est utilisée en tant que clé primaire, la taille de stockage est de 19 octets.
ENUM Une énumération est représentée sous forme de tableau de chaînes. Les valeurs ENUM sont des identificateurs symboliques (jetons) stockés sous forme de petites valeur entières représentant une position ordonnée dans l'énumération.
ARRAY Collection triée de zéro élément ou de plusieurs éléments saisis. Les tableaux qui ne sont pas définis comme JSON ne peuvent pas contenir de valeurs NULL.

Les tableaux déclarés en tant que JSON peuvent contenir n'importe quel JSON valide, y compris la valeur spéciale NULL, appropriée à JSON.
MAP Ensemble non trié de zéro paire ou 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 desnoms du champ et les éléments associés sont desvaleurs du champ. Les valeurs de champ peuvent avoir des types différents, mais les correspondances ne peuvent pas contenir de valeurs de champ NULL.
RECORD Ensemble fixe d'une ou de plusieurs paires clé-élément, où toutes les clés sont des chaînes. Toutes les clés d'un enregistrement doivent être uniques.
JSON Toutes les données JSON valides.

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.

Description de l'image table-state.png ci-après

Description de l'image table-state.png

Etat de la table Description
CREATING La table est en cours de création. Elle n'est pas encore prête à l'emploi.
UPDATING La mise à niveau de la table est en cours. D'autres modifications de table ne sont pas possibles tant que la table est dans cet état.

Une table présente l'état UPDATING lorsque :

- Les limites de table sont en cours de modification
- Le schéma de table évolue
- Ajout ou suppression d'un index de table
ACTIVE 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.
DROPPING La table est en cours de suppression et n'est pas accessible.
DROPPED 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, une table portant le même nom peut être créée à nouveau.

Débogage des erreurs d'instruction SQL dans la console OCI

Lorsque vous utilisez la console OCI pour créer une table à l'aide d'une instruction LDD ou d'une instruction LMD pour insérer ou mettre à jour des données, ou à l'aide d'une requête SELECT pour extraire des données, vous pouvez obtenir une erreur indiquant que votre instruction est incomplète ou défectueuse dans l'un des scénarios courants suivants :

Comment gérer certaines erreurs incomplètes ou défectueuses lors de l'utilisation de la console OCI pour créer ou gérer des données :

Si vous obtenez toujours une erreur après avoir éliminé certaines des situations possibles décrites ci-dessus, vous pouvez utiliser Cloud Shell pour exécuter la requête et capturer l'erreur exacte, comme indiqué dans l'exemple ci-dessous.

Exemple : obtention du message d'erreur pour une instruction SELECT à partir du cloud shell

La commande summarize vérifie la syntaxe et renvoie un bref résumé d'une instruction SQL.

  1. Dans la console OCI, ouvrez Cloud Shell dans le menu supérieur droit.

  2. Copiez l'instruction SQL SELECT (par exemple, query1.sql) dans une variable (SQL_SELECTSTMT).

    Par exemple :

    SQL_SELECTSTMT=$(cat ~/query1.sql | tr '\n' ' ')
  3. Appelez la commande oci ci-dessous pour vérifier la syntaxe de l'instruction SQL SELECT.

    Remarque : vous devez indiquer compartment_id pour cette instruction SELECT.

    oci raw-request --http-method GET --target-uri
    https://nosql.${OCI_REGION}.oci.oraclecloud.com/20190828/query/summarize?compartmentId=$NOSQL_COMPID\
    &statement="$SQL_SELECTSTMT" | jq '.data'

Vous obtenez ainsi l'erreur exacte dans votre instruction SQL.

Référence de langage DDL (Data Definition Language)

Découvrez comment utiliser le langage DDL dans Oracle NoSQL Database Cloud Service.

Utilisez le script DDL Oracle NoSQL Database Cloud Service pour créer, modifier et supprimer des tables et des index.

Pour plus d'informations sur la syntaxe du langage DDL, reportez-vous au guide DDL (Data Definition Language) de table. Ce guide présente le langage DDL pris en charge par le produit Oracle NoSQL Database sur site. Oracle NoSQL Database Cloud Service prend en charge un sous-ensemble de cette fonctionnalité et les différences sont documentées dans la section Différences de langage DDL dans le cloud.

En outre, chaque pilote NoSQL Langage fournit une API permettant d'exécuter une instruction DDL. Pour écrire votre application, reportez-vous à Utilisation d'API pour créer des tables et des index dans Oracle NoSQL Database Cloud Service.

Instructions DDL standard

Voici quelques exemples d'instructions DDL communes :

Créer une table

CREATE TABLE [IF NOT EXISTS] (
    field-definition, field-definition-2 ...,
    PRIMARY KEY (field-name, field-name-2...),
) [USING TTL ttl]

Exemple :

CREATE TABLE IF NOT EXISTS audience_info (
    cookie_id LONG,
    ipaddr STRING,
    audience_segment JSON,
    PRIMARY KEY(cookie_id))

Modifier la table

ALTER TABLE table-name (ADD field-definition)
ALTER TABLE table-name (DROP field-name)
ALTER TABLE table-name USING TTL ttl

Exemple :

ALTER TABLE audience_info USING TTL 7 days

Créer un index

CREATE INDEX [IF NOT EXISTS] index-name ON table-name (path_list)

Exemple :

CREATE INDEX segmentIdx ON audience_info
       (audience_segment.sports_lover AS STRING)

Supprimer une table

DROP TABLE [IF EXISTS] table-name

Exemple :

DROP TABLE audience_info

Pour obtenir une liste complète, reportez-vous aux guides de référence :

Différences de langage DDL dans le cloud

Le langage DDL du service cloud diffère de la description contenue dans le guide de référence comme suit :

Noms de table

Concepts non pris en charge

Référence de langage de requête

Découvrez comment utiliser des instructions SQL pour mettre à jour et interroger des données dans Oracle NoSQL Database Cloud Service.

Oracle NoSQL Database utilise le langage de requête SQL pour mettre à jour et interroger les données dans les tables NoSQL. Pour connaître la syntaxe du langage de requête, reportez-vous à Référence SQL pour Oracle NoSQL Database.

Requêtes standard

SELECT <expression>
FROM <table name>
[WHERE <expression>]
[GROUP BY <expression>]
[ORDER BY <expression> [<sort order>]]
[LIMIT <number>]
[OFFSET <number>];

Exemple :

SELECT * FROM Users;
SELECT id, firstname, lastname FROM Users WHERE firstname = "Taylor";
UPDATE <table_name> [AS <table_alias>]
    <update_clause>[, <update_clause>]*
WHERE <expr>[<returning_clause>];

Exemple :

UPDATE JSONPersons $j
  SET TTL 1 DAYS
  WHERE id = 6
  RETURNING remaining_days($j) AS Expires;

Différences de langage de requête dans le cloud

La prise en charge d'une requête du service cloud diffère de la description contenu dans le manuel de référence du langage de requête comme suit :

Restrictions relatives aux expressions utilisées dans la clause SELECT

Oracle NoSQL Database Cloud Service prend en charge des expressions d'agrégation ou des expressions arithmétiques entre les fonctions d'agrégation. Aucun autre type d'expression n'est autorisé dans la clause SELECT. Par exemple, les expressions CASE ne sont pas autorisées dans la clause SELECT.

Chaque pilote NoSQL Database fournit une API permettant d'exécuter une instruction de requête.

Référence du plan de requête

Un plan d'exécution de requête est la séquence d'opérations qu'Oracle NoSQL Database effectue pour exécuter une requête.

Un plan d'exécution de requête est une arborescence d'itérateurs de plan. Chaque type d'itérateur évalue un type d'expression différent qui peut apparaître dans une requête. En général, le choix de l'index et le type de prédicat d'index associé peuvent avoir un effet drastique sur les performances des requêtes. Par conséquent, en tant qu'utilisateur, vous voulez souvent voir quel index est utilisé par une requête et quels prédicats y ont été propagés. En fonction de ces informations, vous pouvez forcer l'utilisation d'un autre index via des conseils d'index. Ces informations sont contenues dans le plan d'exécution de la requête. Tous les pilotes Oracle NoSQL fournissent des API permettant d'afficher le plan d'exécution d'une requête.

Certains des itérateurs les plus courants et les plus importants utilisés dans les requêtes sont :

Itérateur de TABLE : un itérateur de TABLE est responsable des éléments suivants :

Remarque : Un index est appelé index de couverture par rapport à une requête si celle-ci peut être évaluée en utilisant uniquement les entrées de cet index, c'est-à-dire sans avoir à extraire les lignes associées.

Itérateur SELECT : il est responsable de l'exécution de l'expression SELECT.

Chaque requête contient une clause SELECT. Chaque plan de requête aura donc un itérateur SELECT. Un itérateur SELECT présente la structure suivante :

"iterator kind" : "SELECT",
"FROM" :
  {
  },
"FROM variable" : "...",
"SELECT expressions" :
[
  {
  }
]

L'itérateur SELECT comporte des champs tels que "FROM", "WHERE", "variable FROM" et "Expressions SELECT". "FROM" et "FROM variable" représentent la clause FROM de l'expression SELECT, WHERE représente la clause filter et SELECT expression représente la clause SELECT.

itérateur RECEIVE : il s'agit d'un itérateur interne spécial qui sépare le plan de requête en 2 parties :

  1. L'itérateur RECEIVE lui-même et tous les itérateurs qui sont au-dessus de lui dans l'arborescence d'itérateurs sont exécutés au niveau du pilote.

  2. Tous les itérateurs situés sous l'itérateur RECEIVE sont exécutés sur les noeuds de réplication (RN) ; ces itérateurs forment une sous-arborescence enracinée dans l'enfant unique de l'itérateur RECEIVE.

En général, l'itérateur RECEIVE agit en tant que coordonnateur de requêtes. Il envoie son sous-plan aux numéros RN appropriés pour exécution et collecte les résultats. Il peut effectuer des opérations supplémentaires telles que le tri et l'élimination des doublons et propager les résultats à ses itérateurs ancêtres (le cas échéant) pour un traitement ultérieur.

Types de distribution :

Un type de distribution indique la façon dont la requête sera distribuée pour exécution entre les noms régionaux participant à une base de données Oracle NoSQL (emplacement de stockage). Le type de distribution est une propriété de l'itérateur RECEIVE.

Différents choix de types de distribution sont :

Caractéristiques d'un plan d'exécution d'interrogation :

L'exécution de la requête s'effectue par lots. Lorsqu'un sous-plan de requête est envoyé à une partition ou à un shard pour exécution, il s'exécute là jusqu'à ce qu'une limite de batch soit atteinte. La limite de batch est un nombre d'unités de lecture consommées localement par la requête. La valeur par défaut est de 2000 unités de lecture (environ 2 Mo de données), et elle ne peut être diminuée que via une option de niveau requête.

Lorsque la limite de lots est atteinte, tous les résultats locaux générés sont renvoyés à l'itérateur RECEIVE pour traitement ultérieur, ainsi qu'un indicateur booléen indiquant si d'autres résultats locaux peuvent être disponibles. Si l'indicateur est défini sur Vrai, la réponse inclut les informations de reprise. Si l'itérateur RECEIVE décide de renvoyer la requête vers la même partition/le même shard, il inclura ces informations de reprise dans sa demande, de sorte que l'exécution de la requête redémarre au point où elle s'est arrêtée au cours du batch précédent. En effet, aucun état de requête n'est maintenu au niveau de l'IPR après la fin d'un batch. Le lot suivant pour la même partition/le même shard peut avoir lieu au même RN que le lot précédent ou à un autre RN qui stocke également la même partition/le même shard.