Esempi di casi d'uso per NDCS

Un'applicazione di tracciamento dei bagagli delle compagnie aeree e un servizio di streaming multimediale 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 a Oracle NoSQL Database. Il modello dati SQL per Oracle NoSQL Database supporta dati relazionali flat, dati con tipo gerarchico (schema completo) 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 idiomatiche, offrendo l'accesso nativo al linguaggio applicativo ai dati memorizzati in NoSQL Database. 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 mentre si sviluppa il codice con plugin per uno dei seguenti ambienti di sviluppo integrati supportati: Visual Studio Code o IntelliJ.

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 Oracle NoSQL.

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 query SQL per recuperare i dati richiesti.

Schema 2: servizio media streaming - area di memorizzazione profili utente persistente

Prendi in considerazione un'applicazione di streaming TV. In streaming vari spettacoli che vengono guardati dai clienti di tutto il mondo. Ogni spettacolo ha una serie di stagioni e ogni stagione ha più episodi. È necessario un meta-data store persistente che tenga traccia dell'attività corrente dei clienti utilizzando l'applicazione di streaming TV. Utilizzando questo schema è possibile fornire informazioni utili al cliente come gli episodi che ha guardato, il tempo di visione per episodio, il numero totale di stagioni dello spettacolo che ha 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 tracciamento del bagaglio della compagnia aerea

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. La notazione JSON senza schema non dispone di un tipo di dati fisso. Le informazioni sul bag dei passeggeri sono 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 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 multimediale in streaming - Area di memorizzazione profili 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), che è senza schema. La notazione JSON senza schema non dispone di un tipo di dati 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)
)

Descrivere le 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 specificando 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 determinato campo 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 di tracciamento dei bagagli delle compagnie aeree: una riga di esempio dell'applicazione dei bagagli è riportata di seguito.

"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 riportata di seguito.

CREATE TABLE IF NOT EXISTS BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Vedere Creazione di una tabella Singleton: modalità di input DDL avanzata per informazioni sulla creazione di una tabella con un'istruzione DDL.

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 fornire il file JSON da caricare. Puoi scaricare il file DDL e JSON per l'applicazione di tracciamento delle compagnie aeree qui.

Tabella 2: Servizio di streaming multimediale - Area di memorizzazione profili utente persistente Di seguito è riportata una riga di esempio dell'applicazione di streaming multimediale.

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 riportata 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)
)

Vedere Creazione di una tabella Singleton: modalità di input DDL avanzata per informazioni sulla creazione di una tabella con un'istruzione DDL.

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 fornire il file JSON da caricare. Puoi scaricare il file DDL e JSON per l'applicazione di tracciamento delle compagnie aeree qui.