Amostra de casos de uso para NDCS

Um aplicativo de rastreamento de bagagem de companhia aérea e um serviço de mídia de streaming para armazenar persistentemente o perfil do usuário são dois casos de uso em tempo real do NoSQL Database Cloud Service.

A linguagem SQL do Oracle NoSQL Database fornece uma interface semelhante a SQL para o Oracle NoSQL Database. O modelo de dados SQL para Oracle NoSQL Database suporta dados relacionais simples, dados tipados hierárquicos (completos em esquema) e dados JSON sem esquema. Você tem a flexibilidade de criar tabelas com um esquema bem definido para aplicativos que exigem dados fixos ou uma combinação de dados fixos e JSON sem esquema. O Oracle NoSQL Database suporta muitas das linguagens de programação e estruturas mais populares com APIs de linguagem idiomática e estruturas de dados, oferecendo acesso nativo à linguagem do aplicativo aos dados armazenados no Banco de Dados NoSQL. Atualmente, ele suporta as seguintes linguagens de programação e frameworks: Javascript (Node.js), Python, Java, Golang, C#/.NET e Spring Data. Você também pode navegar no banco de dados ao desenvolver seu código com plug-ins para um dos seguintes ambientes de desenvolvimento integrado suportados: Visual Studio Code,IntelliJ ou Eclipse.

Este artigo tem os seguintes tópicos:

Amostra de casos de uso usados nos exemplos

Você tem dois esquemas diferentes (com cenários em tempo real) para aprender vários conceitos SQL. Esses dois esquemas incluirão vários tipos de dados que podem ser usados no banco de dados NoSQL da Oracle.

Esquema 1: esquema BaggageInfo

Usando este esquema, você pode lidar com um caso de uso em que os passageiros que viajam em um voo podem acompanhar o progresso de suas malas ou bagagem despachadas ao longo da rota até o destino final. Essa funcionalidade pode ser disponibilizada como parte do aplicativo móvel da companhia aérea. Uma vez que o passageiro entra no aplicativo móvel, o número do bilhete ou código de reserva do voo atual é exibido na tela. Os passageiros podem usar essas informações para procurar suas informações de bagagem. O aplicativo móvel está usando o Banco de Dados NoSQL para armazenar todos os dados relacionados à bagagem. No backend, a lógica do aplicativo móvel executa consultas SQL para recuperar os dados necessários.

Esquema 2: Streaming Media Service - Armazenamento de Perfil do Usuário Persistente

Considere um aplicativo de streaming de TV. Ele transmite vários shows que são assistidos por clientes em todo o mundo. Cada show tem várias temporadas e cada temporada tem vários episódios. Você precisa de um armazenamento de metadados persistente que acompanhe a atividade atual dos clientes usando o aplicativo de streaming de TV. Usando esse esquema, você pode fornecer informações úteis ao cliente, como episódios que assistiram, o tempo de exibição por episódio, o número total de temporadas do programa que assistiram etc. Os dados são armazenados no Banco de Dados NoSQL e o aplicativo executa consultas SQL para recuperar os dados necessários e disponibilizá-los ao usuário.

Tabelas usadas nos exemplos

A tabela é a estrutura básica para armazenar dados do usuário.

Tabela 1: Aplicação de rastreamento de bagagem da companhia aérea

A tabela usada neste esquema é BaggageInfo. Este esquema tem uma combinação de tipos de dados fixos como LONG, STRING. Ele também tem um JSON sem esquema (bagInfo) como uma de suas colunas. O JSON sem esquema não tem um tipo de dados fixo. As informações dos passageiros são um JSON sem esquema. Em contraste, as informações do passageiro, como número do bilhete, nome completo, sexo, detalhes de contato, fazem parte de um esquema fixo. Você pode adicionar qualquer número de campos a este campo JSON sem esquema não fixo.

O código a seguir cria a tabela.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Tabela 2: Streaming Media Service - Armazenamento de perfil de usuário persistente

A tabela usada neste esquema é stream_acct. A chave primária nesse esquema é acct_id. O esquema também inclui uma coluna JSON (acct_data), que não tem esquema. O JSON sem esquema não tem um tipo de dados fixo. Você pode adicionar qualquer número de campos a este campo JSON sem esquema não fixo.

O código a seguir cria a tabela.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON, 
PRIMARY KEY(acct_id)
)

Descrever tabelas

Você usa o comando DESCRIBE ou DESC para exibir a descrição de uma tabela.
(DESCRIBE | DESC) [AS JSON] TABLE table_name [ "(" field_name")"]

O AS JSON poderá ser especificado se você quiser que a saída esteja no formato JSON. Você pode obter informações sobre um campo específico em qualquer tabela fornecendo o nome do campo.

Exemplo 1: Descrever uma tabela
DESCRIBE TABLE stream_acct  
Saída:
 === 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    |          |            |          |
 +----+----------------+--------------+----------+---------+----------+------------+----------+
                                                                                                                                                           ---+----------+
Exemplo 2: Descrever uma tabela e exibir a saída como JSON
DESC AS JSON TABLE BaggageInfo
Saída:
{
  "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"]
}
Exemplo 3: Descrever um campo específico de uma tabela
DESCRIBE TABLE BaggageInfo (ticketNo)
Saída:
 +----+----------+------+----------+---------+----------+------------+----------+
 | id |   name   | type | nullable | default | shardKey | primaryKey | identity |
 +----+----------+------+----------+---------+----------+------------+----------+
 |  1 | ticketNo | Long | N        | NULL    | Y        | Y          |          |
 +----+----------+------+----------+---------+----------+------------+----------+

Dados de amostra para executar consultas

Você pode criar tabelas usadas nos exemplos e carregar dados nas tabelas usando a console do OCI.

Tabela 1: Aplicação de rastreamento de bagagem da companhia aérea: Uma linha de amostra da aplicação de bagagem é mostrada abaixo.
"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"
  } ]
Na console do OCI, use o Modo de Entrada DDL Avançada para criar a tabela usando a DDL fornecida a seguir.
CREATE TABLE IF NOT EXISTS BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Consulte Criando uma Tabela Singleton: Modo de Entrada DDL Avançada para obter as etapas de criação de uma tabela com uma instrução DDL.

Para carregar dados na tabela criada na console do OCI, clique no nome da tabela. Os detalhes da tabela são exibidos. Clique em Fazer Upload de Dados. Clique em selecionar arquivo para upload e forneça o arquivo JSON a ser submetido a upload. Você pode fazer download do arquivo DDL e JSON do aplicativo de rastreamento de companhia aérea aqui.

Tabela 2: Streaming Media Service - Armazenamento de perfil de usuário persistente Uma linha de amostra do aplicativo de mídia de streaming é mostrada abaixo.
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"
                }
             ]
          }
       ]
    }
  ]
}
Na console do OCI, use o Modo de Entrada DDL Avançada para criar a tabela usando a DDL fornecida a seguir.
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 Criando uma Tabela Singleton: Modo de Entrada DDL Avançada para obter as etapas de criação de uma tabela com uma instrução DDL.

Para carregar dados na tabela criada na console do OCI, clique no nome da tabela. Os detalhes da tabela são exibidos. Clique em Fazer Upload de Dados. Clique em selecionar arquivo para upload e forneça o arquivo JSON a ser submetido a upload. Você pode fazer download do arquivo DDL e JSON do aplicativo de rastreamento de companhia aérea aqui.