Exemplos de casos de uso para NDCS

Um aplicativo de rastreamento de bagagem de companhia aérea e um serviço 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 à SQL para o Oracle NoSQL Database. O modelo de dados SQL do Oracle NoSQL Database suporta dados relacionais simples, dados com tipagem hierárquica (com esquema completo) 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, dando à sua linguagem de aplicativo acesso nativo aos dados armazenados no NoSQL Database. 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 à medida que desenvolve seu código com plug-ins para um dos seguintes ambientes de desenvolvimento integrado suportados: Visual Studio Code ou IntelliJ.

Este artigo tem os seguintes tópicos:

Exemplos de casos de uso usados nos exemplos

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

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 de check-in ou bagagem ao longo da rota para o destino final. Esta funcionalidade pode ser disponibilizada como parte da aplicação móvel da companhia aérea. Uma vez que o passageiro faz login 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 pesquisar suas informações de bagagem. O aplicativo móvel está usando o NoSQL Database 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: Serviço de Mídia de Streaming - Armazenamento de Perfil de Usuário Persistente

Considere um aplicativo de streaming de TV. Ele transmite vários programas que são assistidos por clientes em todo o mundo. Cada série tem uma série de 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 ele assistiu, o tempo de exibição por episódio, o número total de temporadas do programa que ele assistiu 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 de 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 da bolsa 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 neste 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 de companhia aérea: Uma linha de amostra do aplicativo 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 Tabela Singleton: Modo de Entrada DDL Avançada para obter etapas para criar 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 para o aplicativo de rastreamento de companhias aéreas aqui.

Tabela 2: Serviço de Mídia do Streaming - Armazenamento de perfis 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 Tabela Singleton: Modo de Entrada DDL Avançada para obter etapas para criar 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 para o aplicativo de rastreamento de companhias aéreas aqui.