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. .
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.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON,
PRIMARY KEY(acct_id)
)
Describir tablas
(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.
DESCRIBE TABLE stream_acct
=== 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 | | | |
+----+----------------+--------------+----------+---------+----------+------------+----------+
---+----------+
DESC AS JSON TABLE BaggageInfo
{
"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"]
}
DESCRIBE TABLE BaggageInfo (ticketNo)
+----+----------+------+----------+---------+----------+------------+----------+
| 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.
"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"
} ]
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í.
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"
}
]
}
]
}
]
}
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í.