Exemples de cas d'utilisation de NDCS

Une application de suivi des bagages des compagnies aériennes et un service de médias en continu permettant de stocker de manière persistante le profil d'utilisateur sont deux cas d'utilisation en temps réel du service NoSQL Database Cloud.

Le langage SQL pour Oracle NoSQL Database fournit une interface de type SQL vers Oracle NoSQL Database. Le modèle de données SQL pour Oracle NoSQL Database prend en charge les données relationnelles plates, les données de type hiérarchique (complètes) et les données JSON sans schéma. Vous avez la possibilité de créer des tables avec un schéma bien défini pour les applications qui nécessitent des données fixes ou une combinaison de données fixes et de JSON sans schéma. Oracle NoSQL Database prend en charge de nombreux langages et cadres de programmation les plus populaires avec des API et des structures de données idiomatiques, donnant à votre langage d'application un accès natif aux données stockées dans NoSQL Database. Il prend actuellement en charge les langages et frameworks de programmation suivants : Javascript (Node.js), Python, Java, Golang, C#/.NET et Spring Data. Vous pouvez également naviguer dans la base de données au fur et à mesure que vous développez votre code avec des plugiciels pour l'un des environnements de développement intégré pris en charge suivants : Visual Studio Code,IntelliJ ou Eclipse.

Cet article contient les informations suivantes :

Exemples de cas d'utilisation utilisés dans les exemples

Vous disposez de deux schémas différents (avec des scénarios en temps réel) pour apprendre différents concepts SQL. Ces deux schémas comprendront différents types de données qui peuvent être utilisés dans la base de données Oracle NoSQL.

schéma 1 : schéma BaggageInfo

En utilisant ce schéma, vous pouvez gérer un cas d'utilisation dans lequel les passagers voyageant sur un vol peuvent suivre l'avancement de leurs bagages enregistrés le long de la route vers la destination finale. Cette fonctionnalité peut être mise à disposition dans le cadre de l'application mobile de la compagnie aérienne. Une fois que le passager se connecte à l'application mobile, le numéro de billet ou le code de réservation du vol en cours s'affiche à l'écran. Les passagers peuvent utiliser ces informations pour rechercher des informations sur leurs bagages. L'application mobile utilise la base de données NoSQL pour stocker toutes les données relatives aux bagages. Dans le système dorsal, la logique de l'application mobile exécute des interrogations SQL pour extraire les données requises.

Schéma 2 : Service de médias en continu - Magasin de profils d'utilisateur persistants

Considérez une application de streaming TV. Il diffuse divers spectacles qui sont regardés par les clients du monde entier. Chaque série a plusieurs saisons et chaque saison a plusieurs épisodes. Vous avez besoin d'un magasin de métadonnées persistant qui assure le suivi de l'activité actuelle des clients à l'aide de l'application de diffusion TV en continu. En utilisant ce schéma, vous pouvez fournir des informations utiles au client telles que les épisodes qu'il a regardés, le temps de surveillance par épisode, le nombre total de saisons de l'émission qu'il a regardée, etc. Les données sont stockées dans la base de données NoSQL et l'application effectue des interrogations SQL pour extraire les données requises et les rendre disponibles pour l'utilisateur.

Tables utilisées dans les exemples

La table est la structure de base qui contient les données utilisateur.

Tableau 1 : Application de suivi des bagages de la compagnie aérienne

La table utilisée dans ce schéma est BaggageInfo. Ce schéma comporte une combinaison de types de données fixes tels que LONG, STRING. Il comporte également un JSON sans schéma (bagInfo) comme l'une de ses colonnes. Le JSON sans schéma n'a pas de type de données fixe. Les informations de sac des passagers sont un JSON sans schéma. En revanche, les informations du passager telles que le numéro de billet, le nom complet, le sexe, les coordonnées font toutes partie d'un schéma fixe. Vous pouvez ajouter n'importe quel nombre de champs à ce champ JSON sans schéma non fixe.

Le code suivant crée la table.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Tableau 2 : Service de médias en continu - Magasin de profils d'utilisateur persistant

La table utilisée dans ce schéma est stream_acct. La clé primaire de ce schéma est acct_id. Le schéma inclut également une colonne JSON (acct_data), sans schéma. Le JSON sans schéma n'a pas de type de données fixe. Vous pouvez ajouter n'importe quel nombre de champs à ce champ JSON sans schéma fixe.

Le code suivant crée la table.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON, 
PRIMARY KEY(acct_id)
)

décrire les tables

Vous utilisez la commande DESCRIBE ou DESC pour afficher la description d'une table.
(DESCRIBE | DESC) [AS JSON] TABLE table_name [ "(" field_name")"]

AS JSON peut être spécifié si vous voulez que la sortie soit au format JSON. Vous pouvez obtenir des informations sur un champ spécifique dans n'importe quelle table en indiquant le nom du champ.

Exemple 1 : Décrire une table
DESCRIBE TABLE stream_acct  
Sortie :
 === Information ===
 +-------------+-----+-------+----------------+----------+--------+----------+---------+---------+-------------+
 |    name     | ttl | owner | jsonCollection | sysTable | parent | children | regions | indexes | description |
 +-------------+-----+-------+----------------+----------+--------+----------+---------+---------+-------------+
 | stream_acct |     |       | N              | N        |        |          |         |         |             |
 +-------------+-----+-------+----------------+----------+--------+----------+---------+---------+-------------+

 === Fields ===
 +----+----------------+--------------+----------+---------+----------+------------+----------+
 | id |      name      |     type     | nullable | default | shardKey | primaryKey | identity |
 +----+----------------+--------------+----------+---------+----------+------------+----------+
 |  1 | acct_id        | Integer      | N        | NULL    | Y        | Y          |          |
 +----+----------------+--------------+----------+---------+----------+------------+----------+
 |  2 | profile_name   | String       | Y        | NULL    |          |            |          |
 +----+----------------+--------------+----------+---------+----------+------------+----------+
 |  3 | account_expiry | Timestamp(9) | Y        | NULL    |          |            |          |
 +----+----------------+--------------+----------+---------+----------+------------+----------+
 |  4 | acct_data      | Json         | Y        | NULL    |          |            |          |
 +----+----------------+--------------+----------+---------+----------+------------+----------+
                                                                                                                                                           ---+----------+
Exemple 2 : Décrivez une table et affichez la sortie en tant que JSON
DESC AS JSON TABLE BaggageInfo
Sortie :
{
  "json_version" : 1,
  "type" : "table",
  "name" : "BaggageInfo",
  "fields" : [{
    "name" : "ticketNo",
    "type" : "LONG",
    "nullable" : false
  }, {
    "name" : "fullName",
    "type" : "STRING",
    "nullable" : true
  }, {
    "name" : "gender",
    "type" : "STRING",
    "nullable" : true
  }, {
    "name" : "contactPhone",
    "type" : "STRING",
    "nullable" : true
  }, {
    "name" : "confNo",
    "type" : "STRING",
    "nullable" : true
  }, {
    "name" : "bagInfo",
    "type" : "JSON",
    "nullable" : true
  }],
  "primaryKey" : ["ticketNo"],
  "shardKey" : ["ticketNo"]
}
Exemple 3 : Décrire un champ particulier d'une table
DESCRIBE TABLE BaggageInfo (ticketNo)
Sortie :
 +----+----------+------+----------+---------+----------+------------+----------+
 | id |   name   | type | nullable | default | shardKey | primaryKey | identity |
 +----+----------+------+----------+---------+----------+------------+----------+
 |  1 | ticketNo | Long | N        | NULL    | Y        | Y          |          |
 +----+----------+------+----------+---------+----------+------------+----------+

Exemple de données pour exécuter des interrogations

Vous pouvez créer des tables utilisées dans les exemples et charger des données dans les tables à l'aide de la console OCI.

Tableau 1 : Application de suivi des bagages de la compagnie aérienne : Une rangée d'échantillons de l'application de gestion des bagages est présentée ci-dessous.
"ticketNo" : 1762344493810,
"fullName" : "Adam Phillips",
"gender" : "M",
"contactPhone" : "893-324-1064",
"confNo" : "LE6J4Z",
 [ {
    "id" : "79039899165297",
    "tagNum" : "17657806255240",
    "routing" : "MIA/LAX/MEL",
    "lastActionCode" : "OFFLOAD",
    "lastActionDesc" : "OFFLOAD",
    "lastSeenStation" : "MEL",
    "flightLegs" : [ {
      "flightNo" : "BM604",
      "flightDate" : "2019-02-01T01:00:00",
      "fltRouteSrc" : "MIA",
      "fltRouteDest" : "LAX",
      "estimatedArrival" : "2019-02-01T03:00:00",
      "actions" : [ {
        "actionAt" : "MIA",
        "actionCode" : "ONLOAD to LAX",
        "actionTime" : "2019-02-01T01:13:00"
      }, {
        "actionAt" : "MIA",
        "actionCode" : "BagTag Scan at MIA",
        "actionTime" : "2019-02-01T00:47:00"
      }, {
        "actionAt" : "MIA",
        "actionCode" : "Checkin at MIA",
        "actionTime" : "2019-02-01T23:38:00"
      } ]
    }, {
      "flightNo" : "BM667",
      "flightDate" : "2019-01-31T22:13:00",
      "fltRouteSrc" : "LAX",
      "fltRouteDest" : "MEL",
      "estimatedArrival" : "2019-02-02T03:15:00",
      "actions" : [ {
        "actionAt" : "MEL",
        "actionCode" : "Offload to Carousel at MEL",
        "actionTime" : "2019-02-02T03:15:00"
      }, {
        "actionAt" : "LAX",
        "actionCode" : "ONLOAD to MEL",
        "actionTime" : "2019-02-01T07:35:00"
      }, {
        "actionAt" : "LAX",
        "actionCode" : "OFFLOAD from LAX",
        "actionTime" : "2019-02-01T07:18:00"
      } ]
    } ],
    "lastSeenTimeGmt" : "2019-02-02T03:13:00",
    "bagArrivalDate" : "2019.02.02T03:13:00"
  } ]
À partir de la console OCI, utilisez le mode d'entrée LDD avancée pour créer la table à l'aide du LDD indiqué ci-dessous.
CREATE TABLE IF NOT EXISTS BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Voir Création d'une table mono-ton en mode Entrée LDD avancée pour les étapes de création d'une table avec un énoncé LDD.

Pour charger des données dans la table créée à partir de la console OCI, cliquez sur le nom de la table. Les détails de la table sont affichés. Cliquez sur Charger les données. Cliquez sur Sélectionner le fichier à charger et indiquez le fichier JSON à charger. Vous pouvez télécharger le fichier LDD et JSON pour l'application de suivi des compagnies aériennes ici.

Tableau 2 : Service de médias en continu - Magasin de profils d'utilisateur persistant Un exemple de rangée de l'application de médias en continu est affiché ci-dessous.
1,
123456789,
"AP",
"2023-10-18",
{
   "firstName": "Adam",
   "lastName": "Phillips",
   "country" : "Germany",
   "contentStreamed": [
      {
         "showName" : "At the Ranch",
         "showId" : 26,
         "showtype" : "tvseries",
         "genres" : ["action", "crime", "spanish"], 
         "numSeasons" : 4,
         "seriesInfo": [
            {
               "seasonNum" : 1,
               "numEpisodes" : 2,
               "episodes": [
                  {
                     "episodeID": 20,
		 	"episodeName" : "Season 1 episode 1",
                     "lengthMin": 85,
                     "minWatched": 85,
                     "date" : "2022-04-18"
                  },
                  {
                     "episodeID": 30,
                     "lengthMin": 60,
		 	"episodeName" : "Season 1 episode 2",
                     "minWatched": 60,
                     "date" : "2022-04-18"
                  }
               ]
            },
            {
               "seasonNum": 2,
               "numEpisodes" : 2,
               "episodes": [
                  {
                     "episodeID": 40,
		        "episodeName" : "Season 2 episode 1",
                     "lengthMin": 50,
                     "minWatched": 50,
                     "date" : "2022-04-25"
                  },
                  {
                     "episodeID": 50,
		 	"episodeName" : "Season 2 episode 2",
                     "lengthMin": 45,
                     "minWatched": 30,
                     "date" : "2022-04-27"
                   }
                ]
             }
          ]
       },
       {
          "seasonNum": 3,
          "numEpisodes" : 2,
          "episodes": [
             {
                "episodeID": 60,
	  	"episodeName" : "Season 3 episode 1",
                "lengthMin": 50,
                "minWatched": 50,
                "date" : "2022-04-25"
             },
             {
                 "episodeID": 70,
		   "episodeName" : "Season 3 episode 2",
                 "lengthMin": 45,
                 "minWatched": 30,
                 "date" : "2022-04-27"
              }
            ]
          }
        ]
      },  
      {
        "showName": "Bienvenu",
        "showId": 15,
        "showtype": "tvseries",
        "genres" : ["comedy", "french"], 
        "numSeasons" : 2,
        "seriesInfo": [
           {
             "seasonNum" : 1,
             "numEpisodes" : 2,
             "episodes": [
                {
                    "episodeID": 20,
		      "episodeName" : "Bonjour",
                   "lengthMin": 45,
                   "minWatched": 45,
                   "date" : "2022-03-07"
                },
                {
                   "episodeID": 30,
		      "episodeName" : "Merci",
                   "lengthMin": 42,
                   "minWatched": 42,
                   "date" : "2022-03-08"
                }
             ]
          }
       ]
    }
  ]
}
À partir de la console OCI, utilisez le mode d'entrée LDD avancée pour créer la table à l'aide du LDD indiqué ci-dessous.
CREATE TABLE IF NOT EXISTS stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON, 
PRIMARY KEY(acct_id)
)

Voir Création d'une table mono-ton en mode Entrée LDD avancée pour les étapes de création d'une table avec un énoncé LDD.

Pour charger des données dans la table créée à partir de la console OCI, cliquez sur le nom de la table. Les détails de la table sont affichés. Cliquez sur Charger les données. Cliquez sur Sélectionner le fichier à charger et indiquez le fichier JSON à charger. Vous pouvez télécharger le fichier LDD et JSON pour l'application de suivi des compagnies aériennes ici.