Esempi di casi d'uso per NDCS

Un'applicazione per il monitoraggio dei bagagli delle compagnie aeree e un servizio di streaming media per memorizzare in modo persistente il profilo utente sono due casi d'uso in tempo reale di NoSQL Database Cloud Service.

Il linguaggio SQL per Oracle NoSQL Database fornisce un'interfaccia simile a SQL per Oracle NoSQL Database. Il modello dati SQL per Oracle NoSQL Database supporta dati relazionali flat, dati digitati gerarchicamente (completi dallo schema) e dati JSON senza schema. Hai la flessibilità di creare tabelle con uno schema ben definito per le applicazioni che richiedono dati fissi o una combinazione di dati fissi e JSON senza schema. Oracle NoSQL Database supporta molti dei linguaggi e framework di programmazione più diffusi con API e strutture di dati del linguaggio idiomatico, offrendo all'application language l'accesso nativo ai dati memorizzati nel database NoSQL. Attualmente supporta i seguenti linguaggi e framework di programmazione: Javascript (Node.js), Python, Java, Golang, C#/.NET e Spring Data. È inoltre possibile navigare nel database durante lo sviluppo del codice con plugin per uno dei seguenti ambienti di sviluppo integrati supportati: Visual Studio Code,IntelliJ o Eclipse.

Questo articolo contiene i seguenti argomenti:

Esempi di casi d'uso utilizzati negli esempi

Sono disponibili due schemi diversi (con scenari in tempo reale) per l'apprendimento di vari concetti SQL. Questi due schemi includeranno vari tipi di dati che possono essere utilizzati nel database NoSQL di Oracle.

Schema 1: schema BaggageInfo

Utilizzando questo schema è possibile gestire un caso d'uso in cui i passeggeri che viaggiano su un volo possono monitorare l'avanzamento dei loro bagagli o bagagli registrati lungo il percorso verso la destinazione finale. Questa funzionalità può essere resa disponibile come parte dell'applicazione mobile della compagnia aerea. Una volta che il passeggero accede all'applicazione mobile, il numero del biglietto o il codice di prenotazione del volo corrente viene visualizzato sullo schermo. I passeggeri possono utilizzare queste informazioni per cercare le loro informazioni sul bagaglio. L'applicazione mobile utilizza NoSQL Database per memorizzare tutti i dati relativi al bagaglio. Nel backend, la logica dell'applicazione Mobile esegue le query SQL per recuperare i dati necessari.

Schema 2: servizio multimediale streaming - area di memorizzazione profilo utente persistente

Prendi in considerazione un'applicazione di streaming TV. Esegue lo streaming di vari spettacoli che vengono guardati dai clienti in tutto il mondo. Ogni spettacolo ha un certo numero di stagioni e ogni stagione ha più episodi. È necessario un archivio di metadati persistente che tenga traccia dell'attività corrente dei clienti che utilizzano l'applicazione di streaming TV. Utilizzando questo schema è possibile fornire informazioni utili al cliente come gli episodi che hanno guardato, il tempo di orologio per episodio, il numero totale di stagioni dello spettacolo che hanno guardato, ecc. I dati vengono memorizzati nel database NoSQL e l'applicazione esegue query SQL per recuperare i dati richiesti e renderli disponibili all'utente.

Tabelle utilizzate negli esempi

La tabella è la struttura di base per contenere i dati utente.

Tabella 1: Applicazione di monitoraggio dei bagagli delle compagnie aeree

La tabella utilizzata in questo schema è BaggageInfo. Questo schema ha una combinazione di tipi di dati fissi come LONG, STRING. Ha anche un JSON senza schema (bagInfo) come una delle sue colonne. Il tipo di dati JSON senza schema non è fisso. Le informazioni sui bagagli dei passeggeri sono un JSON senza schema. Al contrario, le informazioni del passeggero come numero di biglietto, nome completo, sesso, dettagli di contatto fanno parte di uno schema fisso. È possibile aggiungere un numero qualsiasi di campi a questo campo JSON senza schema non fisso.

Il codice seguente crea la tabella.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Tabella 2: Servizio Streaming Media - Area di memorizzazione profilo utente persistente

La tabella utilizzata in questo schema è stream_acct. La chiave primaria in questo schema è acct_id. Lo schema include anche una colonna JSON (acct_data), priva di schema. Il tipo di dati JSON senza schema non è fisso. È possibile aggiungere un numero qualsiasi di campi a questo campo JSON senza schema non fisso.

Il codice seguente crea la tabella.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON, 
PRIMARY KEY(acct_id)
)

Descrivi tabelle

Utilizzare il comando DESCRIBE o DESC per visualizzare la descrizione di una tabella.
(DESCRIBE | DESC) [AS JSON] TABLE table_name [ "(" field_name")"]

È possibile specificare AS JSON se si desidera che l'output sia in formato JSON. È possibile ottenere informazioni su un campo specifico in qualsiasi tabella fornendo il nome del campo.

Esempio 1: descrivere una tabella
DESCRIBE TABLE stream_acct  
Output:
 === 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    |          |            |          |
 +----+----------------+--------------+----------+---------+----------+------------+----------+
                                                                                                                                                           ---+----------+
Esempio 2: descrivere una tabella e visualizzare l'output come JSON
DESC AS JSON TABLE BaggageInfo
Output:
{
  "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"]
}
Esempio 3: descrivere un campo specifico di una tabella
DESCRIBE TABLE BaggageInfo (ticketNo)
Output:
 +----+----------+------+----------+---------+----------+------------+----------+
 | id |   name   | type | nullable | default | shardKey | primaryKey | identity |
 +----+----------+------+----------+---------+----------+------------+----------+
 |  1 | ticketNo | Long | N        | NULL    | Y        | Y          |          |
 +----+----------+------+----------+---------+----------+------------+----------+

Dati di esempio per eseguire le query

È possibile creare tabelle utilizzate negli esempi e caricare i dati nelle tabelle utilizzando OCI Console.

Tabella 1: Applicazione per il monitoraggio dei bagagli delle compagnie aeree: di seguito è riportata una riga di esempio dell'applicazione relativa ai bagagli.
"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"
  } ]
Dalla console OCI, utilizzare la modalità di input DDL avanzata per creare la tabella utilizzando la DDL indicata di seguito.
CREATE TABLE IF NOT EXISTS BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Per la procedura di creazione di una tabella con un'istruzione DDL, vedere Creazione di una tabella Singleton: modalità di input DDL avanzata.

Per caricare i dati nella tabella creata dalla console OCI, fare clic sul nome della tabella. Vengono visualizzati i dettagli della tabella. Fare clic su Carica dati. Fare clic su Seleziona file da caricare e specificare il file JSON da caricare. Puoi scaricare il file DDL e JSON per l'applicazione di tracciamento delle compagnie aeree qui.

Tabella 2: Streaming Media Service - Area di memorizzazione profilo utente persistente Di seguito è riportata una riga di esempio dell'applicazione di streaming media.
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"
                }
             ]
          }
       ]
    }
  ]
}
Dalla console OCI, utilizzare la modalità di input DDL avanzata per creare la tabella utilizzando la DDL indicata di seguito.
CREATE TABLE IF NOT EXISTS stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON, 
PRIMARY KEY(acct_id)
)

Per la procedura di creazione di una tabella con un'istruzione DDL, vedere Creazione di una tabella Singleton: modalità di input DDL avanzata.

Per caricare i dati nella tabella creata dalla console OCI, fare clic sul nome della tabella. Vengono visualizzati i dettagli della tabella. Fare clic su Carica dati. Fare clic su Seleziona file da caricare e specificare il file JSON da caricare. Puoi scaricare il file DDL e JSON per l'applicazione di tracciamento delle compagnie aeree qui.