データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

Oracle Database 21cの新機能徹底解説:ブロックチェーン表、ネイティブJSON型、JavaScript実行など

Oracle Database 21cは、オンプレミス環境とクラウドインフラストラクチャ(Autonomous Database(ADB)、Oracle Exadata Service@Customer、Oracle Exadata Machineなど)で提供されるOracleデータベースサービスを支える最新バージョンです。

21cでは、新たなユースケースへの対応、オプティマイザパフォーマンスの自動化、JSONデータやグラフモデルのサポートなどが実現されました。これらの自動化機能により、ユーザーと開発者の双方にとって作業が大幅に容易になっています。

また、幅広いデータモデルとワークロードをサポートし、組み込みの機械学習機能などを備えることで、個別のサービスを導入する必要性を排除します。さらに、Oracle 21cでは、あらゆる種類のデータモデルに対してSQL、REST、APIトランザクションを実行できる点も大きな特徴です。

21cのアーキテクチャ

Oracleデータベースのアーキテクチャは、従来のバージョンと基本的に同じ構造です。Oracleデータベース・インスタンスとOracleデータベース本体で構成されています。

Oracle Database 21cの技術アーキテクチャ

マルチテナント・アーキテクチャは、データファイルと呼ばれる物理ファイル群で構成されます。一方、データベース・インスタンスは、SGA(Shared Global Area/共有グローバル領域)やPGAといったメモリ構造体と、サーバープロセスによるユーザーの代わりのクエリ実行、ディスクからのデータ取得、データファイルやREDOログファイルへの書き込み、実行計画の保持などのタスクを担うバックグラウンドプロセスで構成されます。

シングルインスタンス構成: インスタンスとデータベースが1対1の関係になります。同一サーバー上に複数のシングルインスタンスをインストールすることは可能ですが、各インスタンスにはそれぞれ独立したデータベースが必要です。

Oracle RAC構成: 複数のインスタンスが別々のサーバー上で稼働し、すべてが同じデータベースを使用する構成です。この設計は、高可用性、高性能、スケーラビリティを顧客に提供することを目的としています。

データベース内のリスナーはクライアントアプリケーションからの要求を受け付け、データベースへの接続を確立した後、処理をサーバープロセスに引き渡します。サーバープロセスはユーザーの代理として動作し、要求された処理を実行します。

Oracle 21cの主な新機能

21c世代では、リレーショナル、JSON、XML、空間グラフ、OLAPなど、あらゆる種類のデータ型をサポートしています。また、分析系・運用系・混合系を含むすべてのワークロードに対して、より高いパフォーマンス、スケーラビリティ、可用性、セキュリティを提供します。

1) ブロックチェーン表(Blockchain Tables)

ブロックチェーン表は、検証済みトランザクションに関わるさまざまな課題を解決する機能です。分散台帳をサポートするアプリケーションの複雑な要件に対応できます。通常のヒープ表と同様に動作しますが、いくつかの重要な違いがあります。

最も注目すべき点は、行がテーブルに挿入される際に暗号学的ハッシュ化されることです。これにより、挿入後に行を後から変更することができなくなります。

この仕組みにより「挿入専用」の表が実現され、ユーザーはブロックチェーン表の行を更新・削除できません。さらに、一定期間内でのデータの切り詰め(TRUNCATE)、ブロックチェーンの削除、表のパーティショニングも防止されます。これらの重要な特性により、他のユーザーはブロックチェーン表に格納されたデータがイベントの正確な記録であると信頼できるのです。

2) ネイティブJSONデータ型

従来、JSONデータはVARCHAR2またはLOB(CLOB/BLOB)として格納されていました。これにより開発者はスキーマレスな設計モデルの柔軟性を活かしたアプリケーション構築が可能でした。たとえば、SQLでJSONドキュメントを照会したり、高度な分析を活用したり、個々の属性やドキュメント全体に索引を作成したり、数十億件のJSONドキュメントを並列処理したりできます。

Oracle Database 21cでは、ネイティブデータ型「JSON」が提供され、JSONサポートがさらに強化されました。これにより、読み取りや更新操作のたびにJSONを解析する必要がなくなり、解析は挿入時のみ行われ、以降は内部バイナリ形式で保持されるため、アクセスが大幅に高速化されます。

その結果、読み取り・更新操作は4〜5倍高速になり、非常に大きなJSONドキュメントの更新は20〜30倍高速になる可能性があります。

CREATE TABLE j_order (
   id     INTEGER PRIMARY KEY,
   po_doc JSON
);

新しいデータ型以外にも、Oracle Database 21cでは新しいJSON関数JSON_TRANSFORMが追加されました。この関数を使うと、単一の操作でドキュメント内の複数属性の更新や削除をはるかに簡単に行えます。

UPDATE j_order SET po_doc = JSON_TRANSFORM( po_doc,
   SET '$.address.city' = 'Santa Cruz',
   REMOVE '$.phones[*]?(@.type == "office")'
)
WHERE id = 555;

3) データベース内でのJavaScript実行

Oracle 21cでは、Multi Language Engine(MLE)と呼ばれる新しいPL/SQLパッケージ「DBMS_MLE」を使用して、データベース内部でJavaScriptコードを実行できます。

JavaScriptは、Webアプリケーションやモバイルアプリにおいてリッチなユーザーインタラクションを実現する言語です。ブラウザ上で動作する数少ない言語の一つであり、サーバーサイドとクライアントサイドの両方のコード開発に利用できます。また、複雑なプログラムを実装するための既存ライブラリが豊富に存在し、JSONやRESTといった人気の開発技術とも連携します。

Oracle 21cでは、開発者はデータが存在するデータベース内部で直接JavaScriptコードを実行できます。これにより、データをミッドティア層やブラウザへ移動させることなく、JavaScriptで記述した短い計算タスクを実行できます。MLEはJavaScriptのデータ型とOracle Databaseのデータ型を自動的に相互変換するため、開発者はデータ型変換を意識する必要がありません。

さらに、JavaScriptは組み込みのJavaScriptモジュールを通じてPL/SQLやSQLを実行することもできます。これらすべてにより、APEX開発者はPL/SQLやSQLの強力さを犠牲にすることなく、JavaScriptをファーストクラスの言語としてAPEXアプリ内で活用できます。JavaScriptからは、通常のSQLを通じてデータベースの表やビューにアクセス可能です。以下はJavaScriptコードの記述例です。

declare
  ctx dbms_mle.context_handle_t;
begin
  ctx := dbms_mle.create_context(); -- MLE実行用のコンテキストを作成
  dbms_mle.eval(ctx, 'JAVASCRIPT', 'console.log("Hello from JavaScript")');
  -- 実行コンテキスト内でソースコードを評価
  dbms_mle.drop_context(ctx);
  -- 不要になったら実行コンテキストを破棄
end;

注意: コンテキストが保持されている間、関数を含むグローバルオブジェクトの値が維持されます。

4) SQLマクロ(SQL Macros)

結合(JOIN)の数が増えたり、データ取得が複雑になったりすると、SQLクエリは複雑化しがちです。開発者は従来、ストアドプロシージャやストアドファンクションを使ってこれらの操作を簡素化してきました。しかし、SQLエンジンとPL/SQLエンジンの間でコンテキストスイッチが発生するため、パフォーマンスが低下する可能性がありました。

Oracle 21cのSQLマクロは、この問題を解決します。SQL式や表関数を、実行したいSQLに文字列リテラルを挿入するストアドプロシージャの呼び出しに置き換えることで、コンテキストスイッチによるオーバーヘッドを回避しながら、コードの再利用性と保守性を高められます。

5) In-Memory機能の拡張

列形式(カラムナ形式)でのデータ分析は、行形式と比較してパフォーマンスを大幅に向上させます。行形式の方がデータ更新は高速ですが、Oracle Database In-Memory機能を活用すれば、要件に応じて両方のモデルを使い分けられます。アプリケーションを変更することなく、In-Memoryがカラムナストアを維持し、超高速なリアルタイム分析クエリをサポートします。Oracle Database 21cでは、パフォーマンスと使いやすさを向上させる3つの主要な改善が加えられました。

A. Database In-Memory ベクトル結合(Vector Joins):

In-Memoryカラムストア内の列に対するハッシュ結合などの操作を高速化します。ハッシュ結合の場合、結合処理はより小さな操作に分解され、ベクトル処理に渡されます。使用されるキー値テーブルはSIMD最適化されており、右側・左側の結合における行のマッチングに使われます。これにより、パフォーマンスは最大10倍向上します。

B. セルフマネージング型In-Memoryカラムストア:

Oracle Database In-Memoryの登場当初、ユーザーはメモリに格納する列を明示的に宣言する必要がありました。これはメモリが限られている場合には高い制御性を提供します。

18cでは、アクティブに使用されているオブジェクトを自動的にカラムストアに配置し、未使用のオブジェクトを削除する機能が導入されました。ただし、ユーザーは依然として対象となるオブジェクトを指定する必要がありました。

Oracle Database 21cでは、INMEMORY_AUTOMATIC_LEVELをHIGHに設定することで、すべてのオブジェクトが対象となり、In-Memoryカラムストアの管理業務が大幅に簡素化されます。

C. In-Memory ハイブリッドカラムナスキャン:

メモリには限りがあるため、すべての表のすべての列をカラムストアに格納することは不可能です。多くの場合これは問題になりませんが、カラムストアにあるデータ(列)と行ストアにしか存在しないデータの両方が必要なクエリに遭遇することがあります。

以前のリリースでは、そのようなクエリは単純に行ストアに対して実行されていました。しかしOracle Database 21cでは、両方を活用できます。オプティマイザがIn-Memoryカラムストアをスキャンし、必要に応じて射影された列の値を行ストアからフェッチできるようになりました。これにより、大幅なパフォーマンス向上が期待できます。

まとめ

Oracle Database 21cの全体的なメリットは以下のようにまとめられます。

  • データベースのクエリパフォーマンスが大幅に向上しました。
  • 21c世代はJSON、XML、OLAPなど、あらゆるデータ型をサポートしています。
  • 大規模なスケーラビリティと高い可用性を備え、OLTP、アドホッククエリ、データウェアハウスなど、あらゆるワークロードにセキュリティを提供します。
  • 運用系ワークロードと混合ワークロードの両方をサポートします。
  • 21cでは並列スキャンやオンラインバックアップなど多くの処理が自動化され、開発者はデータ永続化を気にせず開発に集中できます。
  • 自動索引付けなどの機能により、パフォーマンス関連の機能も大幅に自動化されました。

ご質問やフィードバックがございましたら、お気軽にお問い合わせください。

  1. データベース管理者必見!Oracle Database 19cの新機能徹底解説

    Oracle® Database 19cは、数多くの新機能と改善された機能を搭載して登場しました。本記事では、データベース管理者(DBA)の業務を効率化する主要な新機能について詳しく解説します。 はじめに Oracle 19cは、Oracle Database 12cリリース2製品ファミリーにおいて長期サポートが提供される最終リリースです。Linux®、Windows®、Solaris®、HP/UX®、AIX®などの各プラットフォームに加え、Oracle Cloud上でも利用可能です。Oracle 19cは、あらゆる運用系および分析系ワークロードに対して、最高レベルのパフォーマンス、スケーラビ

  2. Ruby 2.6の新機能9選|コード例でわかる注目ポイントを徹底解説

    Ruby 2.6には、開発者の生産性を高める新しい機能やパフォーマンス改善が多数盛り込まれています。 本記事では、Ruby 2.6で導入された9つの注目新機能を、実際のコード例とともにわかりやすく紹介します。最新のRuby動向をキャッチアップしたい方は、ぜひ最後までご覧ください。 1. 無限Range(Endless Range) Ruby 2.5以前でもFloat::INFINITYを使えば終端のない範囲を表現できましたが、Ruby 2.6ではさらに直感的な記法が使えるようになりました。 新しい無限Rangeは次のように書きます。 (1..) 通常のRangeが(1..10)のように終端