DataWeave のインデックス付きリーダー

DataWeave では、メモリ内戦略の場合と同じようにランダムアクセスを可能にしつつメモリ内のドキュメント全体が読み込まれるのを避けるために、一部の入力データ (XML、JSON、CSV) のリーダーでインデックス付き戦略がサポートされています。DataWeave では、入力が特定の設定可能なしきい値より長いか ​indexedReader​ 設定が ​true​ に設定されている場合に、インデックス付きリーダーを使用します。

メモリ内に収まらないファイルを管理する代償として、ファイルをディスク内の一時ファイルに書き込み、ドキュメントコンテンツを事前にインデックス付けすることになり、これには時間もディスクスペースも必要になります。

インデックス付きリーダーでは最大 20 GB の入力ファイルを処理できます。それより大きいファイルでは、より高速なストリーミング戦略を使用します。このモードは機能面ではより厳しく制限されていますが、ストリーミングリーダーに対する最大入力サイズの制限はありません。

サポートされる実際の最大入力ファイルサイズは、入力のコンテンツに依存しているため、推定するのが困難です。

次のリストでは、入力ファイルのさまざまなパートでの制限を示しています。

  • 最大ネスト深度: 4096

  • 個々の値の最大サイズ: 4 GB

  • トークン: ​​2^32-1​ (約 40 億)
    トークンはキー/値のペア、object-start、または array-start のいずれかであり、これによって最大入力ファイルサイズが制限されます。 最大入力ファイルサイズはファイル内の各トークンのサイズとは無関係です。平均の値の長さが長くなるにつれ、入力ファイルサイズが大きくなる傾向があります。これは、重要なのがサイズではなくトークン数であるためです。

次の例では、入力ファイルサイズのサンプルを示しています。

この例では、最大入力ファイルサイズは 40 GB ~ 50 GB です。

[
  {
    "name": "Mariano",
    "lastName": "Achaval"
  },
  ...
]

次の例は前の例に似ていますが、最大ファイルサイズは約 30 GB と縮小されています。

[{"name":"Mariano","lastName":"Achaval"},...]

次の例では、数値 ​1​ の縮小された配列を示しています。DataWeave では、約 8 GB のこうしたファイルのみをサポートしています。

[1,1,1,1,1,1,...]

大きな文字列の管理

サイズが 1.5 MB を超える ​String​ を処理する場合、DataWeave は自動的に値を複数のチャンクに分割してメモリ不足の問題を回避します。この機能は ​JSON​ および ​XML​ 入力データでのみ機能します。

DataWeave が次のシステムプロパティを変更することでこの分割戦略を使用して文字列を処理するタイミングを判断するために使用するしきい値を設定できます。

com.mulesoft.dw.max_memory_allocation

この機能を使用すると、文字列を分割してローカルストレージを通じてアクセスすることによりパフォーマンスが低下する点に注意してください。環境にメモリ内のすべてのコンテンツを読み込むのみ十分なリソースがある場合、次のシステムプロパティの値を ​false​ に設定してこの文字列管理機能を完全に無効にすることもできます。

com.mulesoft.dw.buffered_char_sequence.enabled