Exemples de cas d'emploi pour NDCS

Une application de suivi des bagages des compagnies aériennes et un service de streaming multimédia pour stocker de manière persistante le profil utilisateur sont deux cas d'utilisation en temps réel de NoSQL Database Cloud Service.

Le langage SQL pour Oracle NoSQL Database fournit une interface de type SQL à 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 en schéma) 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 structures de programmation les plus populaires avec des API et des structures de données en langage idiomatique, ce qui donne à votre langage d'application un accès natif aux données stockées dans NoSQL Database. Il prend actuellement en charge les frameworks et langages de programmation suivants : Javascript (Node.js), Python, Java, Golang, C#/.NET et Spring Data. Vous pouvez également naviguer dans la base de données lors du développement de votre code avec des modules d'extension pour l'un des environnements de développement intégrés pris en charge suivants : Visual Studio Code,IntelliJ ou Eclipse.

Cet article comprend les rubriques suivantes :

Exemples de cas d'emploi 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 incluent différents types de données pouvant ê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 la progression de leurs bagages enregistrés ou de leurs bagages 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 leurs informations sur leurs bagages. L'application mobile utilise NoSQL Database pour stocker toutes les données relatives aux bagages. Dans le back-end, la logique de l'application mobile exécute des requêtes SQL pour extraire les données requises.

Schema 2 : Streaming Media Service - Persistent User Profile Store

Pensez à une application de streaming TV. Il diffuse divers spectacles qui sont regardés par les clients à travers le monde. Chaque série a un certain nombre de 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 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 visionnage par épisode, le nombre total de saisons de l'émission qu'il a regardées, etc. Les données sont stockées dans la base de données NoSQL et l'application exécute des requêtes 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 des compagnies aériennes

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 dispose également d'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 du billet, le nom complet, le sexe, les coordonnées font toutes partie d'un schéma fixe. Vous pouvez ajouter un nombre quelconque 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 : Streaming Media Service - Banque de profils utilisateur persistante

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), qui est sans schéma. Le JSON sans schéma n'a pas de type de données fixe. Vous pouvez ajouter autant de champs que vous le souhaitez à 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

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 indiqué 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 son nom.

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écrire une table et afficher la sortie au format 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          |          |
 +----+----------+------+----------+---------+----------+------------+----------+

Exemples de données pour exécuter des requêtes

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 des compagnies aériennes : Un exemple de ligne de l'application de suivi des bagages est affiché 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"
  } ]
A partir de la console OCI, utilisez le mode d'entrée DDL avancé pour créer la table à l'aide du DDL indiqué ci-dessous.
CREATE TABLE IF NOT EXISTS BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Pour connaître les étapes de création d'une table avec une instruction DDL, reportez-vous à Création d'une table unique en mode d'entrée DDL avancée.

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 s'affichent. Cliquez sur Charger des données. Cliquez sur sélectionner le fichier à télécharger et indiquez le fichier JSON à télécharger. Vous pouvez télécharger le fichier DDL et JSON pour l'application de suivi des compagnies aériennes ici.

Tableau 2 : Service de média de transmission en continu - Banque de profils utilisateur persistante Un exemple de ligne de l'application de média de transmission 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"
                }
             ]
          }
       ]
    }
  ]
}
A partir de la console OCI, utilisez le mode d'entrée DDL avancé pour créer la table à l'aide du DDL 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)
)

Pour connaître les étapes de création d'une table avec une instruction DDL, reportez-vous à Création d'une table unique en mode d'entrée DDL avancée.

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 s'affichent. Cliquez sur Charger des données. Cliquez sur sélectionner le fichier à télécharger et indiquez le fichier JSON à télécharger. Vous pouvez télécharger le fichier DDL et JSON pour l'application de suivi des compagnies aériennes ici.