3 JSONデータの格納および管理の概要

この概要では、(1) JSON列のデータ型、(2) JSONデータ向けのLOB記憶域の考慮事項、(3) JSON列に整形式のJSONデータが格納されていることの確認、について説明します。

JSON列のデータ型

Oracle DatabaseにJSONデータを格納するには、データ型がVARCHAR2CLOBまたはBLOBの列を使用します。どのデータ型を使用しても、それらのデータ型の他のデータを操作する場合と同様に、JSONデータを操作できます。標準のデータ型を使用してJSONデータを格納すると、アドバンスト・レプリケーションなどのOracle Databaseのすべての機能で、JSON文書が格納された表を使用できるようになります。どれを使用するかは、一般的に、管理が必要なJSON文書のサイズによって決まります。

  • 最も大きいJSON文書が4000バイト(または文字)を超えないことが確かな場合は、VARCHAR2(4000)を使用します脚注1脚注1

    Oracle Exadataを使用している場合は、VARCHAR2(4000)を選択すると、パフォーマンスの向上のために一部のJSON操作の実行をExadataの記憶域セルに押し下げることができるため、パフォーマンスを向上させることができます。

  • JSON文書のうち、いくつかが4000バイト(または文字)を超えるということがわかっており、すべて32767バイト(または文字)以下であることが確かな場合は、VARCHAR2(32767)を使用します脚注1

    VARCHAR2(32767)の場合、文書の最初の約3.5Kバイト(または文字)は、表の行の一部として表内に格納されます。これは、VARCHAR2(4000)ではなくVARCHAR2(32767)を使用することで増えるコストが、約3.5Kより大きい文書にのみ適用されることを意味します。ほとんどの文書がこのサイズよりも小さい場合は、VARCHAR2(4000)を使用する場合と比べてパフォーマンスにほとんど差は出ません。

    Oracle Exadataを使用する場合は、行内に格納されているすべての文書に対してプッシュダウンが有効になります。

  • 32767バイト(または文字)よりも大きいJSON文書があることがわかっている場合は、BLOB (バイナリ・ラージ・オブジェクト)またはCLOB (キャラクタ・ラージ・オブジェクト)のテキストJSON記憶域を使用します脚注1

  • 高速な問合せおよび更新パフォーマンスが必要な場合は、最適化されたバイナリ形式OSONBLOB記憶域を使用します。このためには、条件is json FORMAT OSONでチェック制約を使用します。

    リリース19cでは、OSON形式のBLOBは、Oracle Autonomousデータベースでのみサポートされます。

JSON列に整形式のJSONデータが格納されていることの確認

SQL/JSON条件is jsonを使用して、一部のJSONデータが整形式かどうかをチェックできます。整形式のJSONデータ以外のデータが一部の行に含まれることが予期される場合を除いて、すべてのJSON列にis jsonチェック制約を適用することをお薦めします。

JSON解析のオーバーヘッドは、条件が挿入や更新のパフォーマンスに重大な影響を及ぼさないことを評価するといったもので、制約を除外すると、JSONデータの問合せに単純なドット表記法の構文を使用できないことになります。

何をもって整形式のJSONデータとするかは明確ではありません。実際には、JSONデータには、標準の定義に厳密には従わない特徴がいくつかあることが一般的です。JSONデータの特定の列に、標準の定義(厳密な構文)と、一般的に使用されるJavaScriptのような構文(緩慢な構文)のどちらの構文を必要とするかを制御できます。Oracle Database向けのデフォルトのSQL/JSON構文は緩慢です。どの種類の構文を使用するかは、条件is jsonで制御します。JSON列にis jsonチェック制約を適用することで、このように緩慢なJSON構文をデフォルトで使用できるようになります。



脚注の凡例

脚注1: 制限がバイトと文字のどちらで表されるかは、セッション・パラメータNLS_LENGTH_SEMANTICSによって決まります。