3 JSONデータの格納および管理の概要
JSONデータは、表の1つ以上の列に、単独でまたはリレーショナル列とともに格納できます。JSON
データ型をお薦めしますが、JSONをテキストで格納することもできます。テキストJSONデータを格納する場合は、SQL/JSON条件is json
を使用して、データが整形式であることを確認します。
ユースケースが主にドキュメント中心の場合は、JSONコレクションの使用を検討してください。JSONコレクションは、DATA
という名前の単一のJSON
型の列にJSON文書を提供する特別な表またはビューです。脚注1
JSONコレクションは、通常のドライバ、フレームワーク、ツールおよび開発方法とともに、Oracle Database API for MongoDB、Simple Oracle Document Access (SODA)、RESTなどのドキュメントAPIとともに使用すると便利です。「JSONコレクション」を参照してください。
JSON列のデータ型
Oracle DatabaseにJSONデータを格納するには、データ型がJSON
、VARCHAR2
、CLOB
またはBLOB
の列を使用します。どのデータ型を使用しても、それらのデータ型の他のデータを操作する場合と同様に、JSONデータを操作できます。標準のデータ型を使用してJSONデータを格納すると、アドバンスト・レプリケーションなどのOracle Databaseのすべての機能で、JSON文書が格納された表を使用できるようになります。
ネイティブなバイナリ形式でJSONデータを格納するJSON
データ型を使用することをお薦めします。
他のいずれかの型を使用する場合、どれを使用するかは、一般的に、管理が必要なJSON文書のサイズによって決まります。
-
最も大きいJSON文書が4000バイト(または文字)を超えないことが確かな場合は、
VARCHAR2(4000)
を使用します脚注2。Oracle Exadataを使用している場合は、
VARCHAR2(4000)
を選択すると、パフォーマンスの向上のために一部のJSON操作の実行をExadataの記憶域セルに押し下げることができるため、パフォーマンスを向上させることができます。 -
JSON文書のうち、いくつかが4000バイト(または文字)を超えるということがわかっており、すべて32767バイト(または文字)以下であることが確かな場合は、
VARCHAR2(32767)
を使用します脚注2。VARCHAR2(32767)
の場合、文書の最初の約3.5Kバイト(または文字)は、表の行の一部として表内に格納されます。これは、VARCHAR2(4000)
ではなくVARCHAR2(32767)
を使用することで増えるコストが、約3.5Kより大きい文書にのみ適用されることを意味します。ほとんどの文書がこのサイズよりも小さい場合は、VARCHAR2(4000)
を使用する場合と比べてパフォーマンスにほとんど差は出ません。Oracle Exadataを使用する場合は、行内に格納されているすべての文書に対してプッシュダウンが有効になります。
-
32767バイト(または文字)よりも大きいJSON文書があることがわかっている場合は、
BLOB
(バイナリ・ラージ・オブジェクト)またはCLOB
(キャラクタ・ラージ・オブジェクト)の記憶域を使用します脚注2。
JSON列に整形式のJSONデータが格納されていることの確認
JSON
データ型を使用してJSONデータを格納する場合(推奨)、データは整形式のJSONデータであることが保証されます。それ以外の場合は格納できません。
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構文をデフォルトで使用できるようになります。
親トピック: JSONデータの格納および管理
脚注の凡例
脚注1: コレクション表では、各文書に一意のドキュメント識別子フィールド_id
が自動的に設定されます。コレクション・ビューでは、文書にドキュメント識別子フィールドを設定することはできますが、必要はありません。また、_id
という名前を付ける必要もありません。脚注2: 制限がバイトで表されるか、文字で表されるかは、セッション・パラメータ
NLS_LENGTH_SEMANTICS
によって決まります。