Beispiele für Anwendungsfälle für NDCS

Eine Anwendung zur Gepäckverfolgung von Fluggesellschaften und ein Streaming-Mediendienst zur dauerhaften Speicherung von Benutzerprofilen sind zwei Echtzeitanwendungsfälle von NoSQL Database Cloud Service.

Die SQL for Oracle NoSQL Database-Sprache bietet eine SQL-ähnliche Schnittstelle zu Oracle NoSQL Database. Das SQL for Oracle NoSQL Database-Datenmodell unterstützt flache relationale Daten, hierarchisch typisierte (schemavolle) Daten und schemalose JSON-Daten. Sie haben die Flexibilität, Tabellen mit einem wohldefinierten Schema für Anwendungen zu erstellen, die feste Daten oder eine Kombination aus festen Daten und JSON ohne Schema erfordern. Oracle NoSQL Database unterstützt viele der beliebtesten Programmiersprachen und Frameworks mit idiomatischen Sprach-APIs und Datenstrukturen, sodass Ihre Anwendungssprache nativen Zugriff auf Daten erhält, die in der NoSQL-Datenbank gespeichert sind. Derzeit werden die folgenden Programmiersprachen und Frameworks unterstützt: Javascript (Node.js), Python, Java, Golang, C#/.NET und Spring Data. Sie können auch in der Datenbank navigieren, während Sie Ihren Code mit Plug-ins für eine der folgenden unterstützten integrierten Entwicklungsumgebungen entwickeln: Visual Studio Code,IntelliJ oder Eclipse.

Dieser Artikel enthält die folgenden Themen:

Beispiele für in den Beispielen verwendete Anwendungsfälle

Sie haben zwei verschiedene Schemas (mit Echtzeitszenarios) zum Erlernen verschiedener SQL-Konzepte. Diese beiden Schemas enthalten verschiedene Datentypen, die in der Oracle-Datenbank NoSQL verwendet werden können.

Schema 1: Schema BaggageInfo

Mit diesem Schema können Sie einen Anwendungsfall bearbeiten, in dem Passagiere, die auf einem Flug reisen, den Fortschritt ihrer eingecheckten Taschen oder ihres Gepäcks entlang der Route zum endgültigen Ziel verfolgen können. Diese Funktionalität kann als Teil der mobilen Anwendung der Fluggesellschaft zur Verfügung gestellt werden. Sobald sich der Passagier in der mobilen Anwendung anmeldet, wird die Ticketnummer oder der Reservierungscode des aktuellen Fluges auf dem Bildschirm angezeigt. Passagiere können diese Informationen verwenden, um nach ihren Gepäckinformationen zu suchen. Die mobile Anwendung verwendet NoSQL Database, um alle Daten zum Gepäck zu speichern. Im Backend führt die Logik der mobilen Anwendung SQL-Abfragen aus, um die erforderlichen Daten abzurufen.

Schema 2: Streaming Media Service - Persistenter Benutzerprofilspeicher

Betrachten Sie eine TV-Streaming-Anwendung. Es streamt verschiedene Shows, die von Kunden auf der ganzen Welt beobachtet werden. Jede Show hat eine Reihe von Saisons und jede Saison hat mehrere Episoden. Sie benötigen einen persistenten Metadatenspeicher, der die aktuelle Aktivität der Kunden mit der TV-Streaming-Anwendung verfolgt. Mit diesem Schema können Sie dem Kunden nützliche Informationen zur Verfügung stellen, z. B. Episoden, die er gesehen hat, die Uhrzeit pro Episode, die Gesamtzahl der Jahreszeiten der von ihm gesehenen Show usw. Die Daten werden in der Datenbank NoSQL gespeichert, und die Anwendung führt SQL-Abfragen aus, um die erforderlichen Daten abzurufen und dem Benutzer verfügbar zu machen.

In den Beispielen verwendete Tabellen

Die Tabelle ist die grundlegende Struktur für Benutzerdaten.

Tabelle 1: Anwendung zur Gepäckverfolgung bei Fluggesellschaften

Die in diesem Schema verwendete Tabelle ist BaggageInfo. Dieses Schema enthält eine Kombination aus festen Datentypen wie LONG, STRING. Außerdem enthält es eine schemalose JSON (bagInfo) als eine ihrer Spalten. Das schemalose JSON hat keinen festen Datentyp. Die Gepäckinformationen der Passagiere sind eine schemalose JSON. Im Gegensatz dazu sind die Informationen des Passagiers wie Ticketnummer, vollständiger Name, Geschlecht, Kontaktdaten alle Teil eines festen Schemas. Sie können diesem nicht festen schemalosen JSON-Feld beliebig viele Felder hinzufügen.

Der folgende Code erstellt die Tabelle.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Tabelle 2: Streaming Media Service - Persistenter Benutzerprofilspeicher

Die in diesem Schema verwendete Tabelle ist stream_acct. Der Primärschlüssel in diesem Schema ist acct_id. Das Schema enthält auch eine JSON-Spalte (acct_data), die ohne Schema ist. Das schemalose JSON hat keinen festen Datentyp. Sie können diesem JSON-Feld ohne Schema beliebig viele Felder hinzufügen.

Der folgende Code erstellt die Tabelle.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON, 
PRIMARY KEY(acct_id)
)

Tabellen beschreiben

Mit dem Befehl DESCRIBE oder DESC können Sie die Beschreibung einer Tabelle anzeigen.
(DESCRIBE | DESC) [AS JSON] TABLE table_name [ "(" field_name")"]

AS JSON kann angegeben werden, wenn die Ausgabe im JSON-Format vorliegen soll. Sie können Informationen zu einem bestimmten Feld in einer beliebigen Tabelle abrufen, indem Sie den Feldnamen angeben.

Beispiel 1: Tabelle beschreiben
DESCRIBE TABLE stream_acct  
Ausgabe:
 === 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    |          |            |          |
 +----+----------------+--------------+----------+---------+----------+------------+----------+
                                                                                                                                                           ---+----------+
Beispiel 2: Beschreiben Sie eine Tabelle, und zeigen Sie die Ausgabe als JSON an
DESC AS JSON TABLE BaggageInfo
Ausgabe:
{
  "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"]
}
Beispiel 3: Beschreiben Sie ein bestimmtes Feld einer Tabelle.
DESCRIBE TABLE BaggageInfo (ticketNo)
Ausgabe:
 +----+----------+------+----------+---------+----------+------------+----------+
 | id |   name   | type | nullable | default | shardKey | primaryKey | identity |
 +----+----------+------+----------+---------+----------+------------+----------+
 |  1 | ticketNo | Long | N        | NULL    | Y        | Y          |          |
 +----+----------+------+----------+---------+----------+------------+----------+

Beispieldaten zum Ausführen von Abfragen

Sie können Tabellen erstellen, die in den Beispielen verwendet werden, und Daten mit der OCI-Konsole in die Tabellen laden.

Tabelle 1: Anwendung zur Gepäckverfolgung bei Fluggesellschaften: Eine Beispielzeile der Gepäckanwendung wird unten angezeigt.
"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"
  } ]
Verwenden Sie in der OCI-Konsole den erweiterten DDL-Eingabemodus, um die Tabelle mit der unten angegebenen DDL zu erstellen.
CREATE TABLE IF NOT EXISTS BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)

Die Schritte zum Erstellen einer Tabelle mit einer DDL-Anweisung finden Sie unter Singleton-Tabelle erstellen: Advanced DDL Input Mode.

Um Daten in die aus der OCI-Konsole erstellte Tabelle zu laden, klicken Sie auf den Tabellennamen. Die Details der Tabelle werden angezeigt. Klicken Sie auf Daten hochladen. Klicken Sie auf Datei zum Hochladen auswählen, und geben Sie die hochzuladende JSON-Datei an. Sie können die DDL- und JSON-Datei für die Airline-Tracking-Anwendung hier herunterladen.

Tabelle 2: Streaming Media Service - Persistenter Benutzerprofilspeicher Eine Beispielzeile der Streaming Media-Anwendung wird unten angezeigt.
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"
                }
             ]
          }
       ]
    }
  ]
}
Verwenden Sie in der OCI-Konsole den erweiterten DDL-Eingabemodus, um die Tabelle mit der unten angegebenen DDL zu erstellen.
CREATE TABLE IF NOT EXISTS stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(9),
acct_data JSON, 
PRIMARY KEY(acct_id)
)

Die Schritte zum Erstellen einer Tabelle mit einer DDL-Anweisung finden Sie unter Singleton-Tabelle erstellen: Advanced DDL Input Mode.

Um Daten in die aus der OCI-Konsole erstellte Tabelle zu laden, klicken Sie auf den Tabellennamen. Die Details der Tabelle werden angezeigt. Klicken Sie auf Daten hochladen. Klicken Sie auf Datei zum Hochladen auswählen, und geben Sie die hochzuladende JSON-Datei an. Sie können die DDL- und JSON-Datei für die Airline-Tracking-Anwendung hier herunterladen.