Ejemplos de casos de uso para NDCS

Una aplicación de seguimiento de equipaje de una aerolínea y un servicio de medios de transmisión para almacenar de forma persistente el perfil de usuario son dos casos de uso en tiempo real de NoSQL Database Cloud Service.

El lenguaje SQL para Oracle NoSQL Database proporciona una interfaz similar a SQL para Oracle NoSQL Database. El modelo de datos SQL para Oracle NoSQL Database soporta datos relacionales planos, datos de tipo jerárquico (completos en esquema) y datos JSON sin esquema. Puede crear tablas con un esquema bien definido para aplicaciones que requieren datos fijos o una combinación de datos fijos y JSON sin esquema. Oracle NoSQL Database soporta muchos de los lenguajes y marcos de programación más conocidos con API de lenguaje idiomático y estructuras de datos, lo que proporciona a su lenguaje de aplicación acceso nativo a los datos almacenados en la base de datos NoSQL. Actualmente soporta los siguientes lenguajes y marcos de programación: Javascript (Node.js), Python, Java, Golang, C#/.NET y Spring Data. También puede navegar por la base de datos a medida que desarrolla el código con plugins para uno de los siguientes entornos de desarrollo integrados soportados: Visual Studio Code,IntelliJ o Eclipse.

En este artículo se incluyen los siguientes temas:

Ejemplos de casos de uso utilizados en los ejemplos

Tiene dos esquemas diferentes (con escenarios en tiempo real) para aprender varios conceptos de SQL. Estos dos esquemas incluirán varios tipos de dato que se pueden utilizar en la base de datos NoSQL de Oracle.

Esquema 1: Esquema BaggageInfo

Con este esquema puede manejar un caso de uso en el que los pasajeros que viajan en un vuelo pueden rastrear el progreso de sus maletas o equipaje facturados a lo largo de la ruta hasta el destino final. Esta funcionalidad puede estar disponible como parte de la aplicación móvil de la aerolínea. Una vez que el pasajero se conecta a la aplicación móvil, el número de billete o el código de reserva del vuelo actual se muestra en la pantalla. Los pasajeros pueden utilizar esta información para buscar su información de equipaje. La aplicación móvil utiliza la base de datos NoSQL para almacenar todos los datos relacionados con el equipaje. En el backend, la lógica de la aplicación móvil realiza consultas SQL para recuperar los datos necesarios.

Esquema 2: Servicio de medios de transmisión - Almacén de perfiles de usuario persistentes

Considere una aplicación de transmisión de TV. Transmite varios programas que son vistos por clientes de todo el mundo. Cada serie tiene varias temporadas y cada temporada tiene múltiples episodios. Necesita un almacén de metadatos persistente que realice un seguimiento de la actividad actual de los clientes mediante la aplicación de transmisión de TV. Con este esquema puede proporcionar información útil al cliente, como los episodios que vieron, el tiempo de observación por episodio, el número total de temporadas del programa que vieron, etc. Los datos se almacenan en la base de datos NoSQL y la aplicación realiza consultas SQL para recuperar los datos necesarios y ponerlos a disposición del usuario.

Tablas utilizadas en los ejemplos

La tabla es la estructura básica para contener los datos de usuario.

Tabla 1: Aplicación de seguimiento de equipaje de la aerolínea

La tabla utilizada en este esquema es BaggageInfo. Este esquema tiene una combinación de tipos de dato fijos como LONG, STRING. También tiene un JSON sin esquema (bagInfo) como una de sus columnas. El JSON sin esquema no tiene un tipo de dato fijo. La información de la bolsa de los pasajeros es un JSON sin esquema. Por el contrario, la información del pasajero, como el número de billete, el nombre completo, el género y los datos de contacto, forma parte de un esquema fijo. Puede agregar cualquier número de campos a este campo JSON sin esquema no fijo. .

El siguiente código crea la tabla.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Tabla 2: Servicio de medios de transmisión: almacén de perfiles de usuario persistente

La tabla utilizada en este esquema es stream_acct. La clave principal de este esquema es acct_id. El esquema también incluye una columna JSON (acct_data), que no tiene esquema. El JSON sin esquema no tiene un tipo de dato fijo. Puede agregar cualquier número de campos a este campo JSON sin esquema no fijo.

El siguiente código crea la tabla.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON, 
PRIMARY KEY(acct_id)
)

Describir tablas

Utilice los comandos DESCRIBE o DESC para ver la descripción de una tabla.
(DESCRIBE | DESC) [AS JSON] TABLE table_name [ "(" field_name")"]

AS JSON se puede especificar si desea que la salida esté en formato JSON. Puede obtener información sobre un campo específico en cualquier tabla proporcionando el nombre del campo.

Ejemplo 1: Descripción de una tabla
DESCRIBE TABLE stream_acct  
Salida:
 === 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    |          |            |          |
 +----+----------------+--------------+----------+---------+----------+------------+----------+
                                                                                                                                                           ---+----------+
Ejemplo 2: Describir una tabla y mostrar la salida como JSON
DESC AS JSON TABLE BaggageInfo
Salida:
{
  "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"]
}
Ejemplo 3: Describir un campo concreto de una tabla
DESCRIBE TABLE BaggageInfo (ticketNo)
Salida:
 +----+----------+------+----------+---------+----------+------------+----------+
 | id |   name   | type | nullable | default | shardKey | primaryKey | identity |
 +----+----------+------+----------+---------+----------+------------+----------+
 |  1 | ticketNo | Long | N        | NULL    | Y        | Y          |          |
 +----+----------+------+----------+---------+----------+------------+----------+

Datos de ejemplo para ejecutar consultas

Puede crear tablas utilizadas en los ejemplos y cargar datos en las tablas mediante la consola de OCI.

Tabla 1: Aplicación de seguimiento de equipaje de línea aérea: a continuación se muestra una fila de ejemplo de la aplicación de equipaje.
"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"
  } ]
Desde la consola de OCI, utilice el modo de entrada DDL avanzado para crear la tabla mediante el DDL que se proporciona a continuación.
CREATE TABLE IF NOT EXISTS BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Consulte Creación de tablas singleton: modo de entrada de DDL avanzado para conocer los pasos para crear una tabla con una sentencia DDL.

Para cargar datos en la tabla creada desde la consola de OCI, haga clic en el nombre de la tabla. Se muestran los detalles de la tabla. Haga clic en Cargar datos. Haga clic en Seleccionar archivo para cargar y proporcione el archivo JSON que se va a cargar. Puede descargar el archivo DDL y JSON para la aplicación de seguimiento de aerolíneas aquí.

Tabla 2: Servicio de medios de flujo: almacén de perfiles de usuario persistente A continuación se muestra una fila de ejemplo de la aplicación de medios de flujo.
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"
                }
             ]
          }
       ]
    }
  ]
}
Desde la consola de OCI, utilice el modo de entrada DDL avanzado para crear la tabla mediante el DDL que se proporciona a continuación.
CREATE TABLE IF NOT EXISTS stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON, 
PRIMARY KEY(acct_id)
)

Consulte Creación de tablas singleton: modo de entrada de DDL avanzado para conocer los pasos para crear una tabla con una sentencia DDL.

Para cargar datos en la tabla creada desde la consola de OCI, haga clic en el nombre de la tabla. Se muestran los detalles de la tabla. Haga clic en Cargar datos. Haga clic en Seleccionar archivo para cargar y proporcione el archivo JSON que se va a cargar. Puede descargar el archivo DDL y JSON para la aplicación de seguimiento de aerolíneas aquí.