Exemples de cas d'utilisation pour 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 des profils 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 à 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 typées hiérarchiques (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 la plupart des langages et cadres de programmation les plus populaires avec des API et des structures de données en langage idiomatique, 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 cadres de programmation suivants : Javascript (Node.js), Python, Java, Golang, C#/.NET et Spring Data. Vous pouvez également naviguer dans la base de données lorsque vous développez votre code avec des plugiciels pour l'un des environnements de développement intégrés pris en charge suivants : Visual Studio Code ou IntelliJ.

Cet article contient les rubriques 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 incluent 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

À l'aide de 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 sacs ou 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 actuel est affiché à l'écran. Les passagers peuvent utiliser ces informations pour rechercher leurs informations de bagages. L'application mobile utilise NoSQL Database 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 diffusion en continu - Magasin de profils d'utilisateur persistants

Pensez à une application de streaming TV. Il diffuse diverses émissions qui sont regardées par les clients à travers le monde. Chaque émission 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 TV. À l'aide de ce schéma, vous pouvez fournir des informations utiles au client, telles que les épisodes qu'il a regardés, le temps de montre par épisode, le nombre total de saisons de l'émission qu'il a regardée, etc. Les données sont stockées dans le service NoSQL Database et l'application exécute des interrogations SQL pour extraire les données requises et les mettre à la disposition de l'utilisateur.

Tables utilisées dans les exemples

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

Tableau 1 : Demande 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 a é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 sur le 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 un nombre illimité 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 persistants

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 un nombre illimité de champs à ce champ JSON sans schéma non 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          |          |
+----+----------+------+----------+---------+----------+------------+----------+

Données-échantillons 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 : Demande de suivi des bagages des compagnies aériennes : Une rangée d'échantillon de la demande de bagages est indiqué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 singleton : Mode d'entrée LDD avancée pour les étapes de création d'une table avec un énoncé LDD.

Pour charger les 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 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 singleton : Mode d'entrée LDD avancée pour les étapes de création d'une table avec un énoncé LDD.

Pour charger les 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 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.