次の構造の XML マッピング ファイルがあります。
<mappings>
<mapping path="first">
<parameter name="client_identifier">value1</parameter>
<parameter name="device_identifier">value2</parameter>
<parameter name="network_identifier">value3</parameter>
</mapping>
<mapping path="second">
<parameter name="client_identifier">value1</parameter>
<parameter name="device_identifier">value2</parameter>
<parameter name="network_identifier">value4</parameter>
</mapping>
<mapping path="third">
<parameter name="client_identifier">value1</parameter>
<parameter name="device_identifier">value2</parameter>
</mapping>
<!-- hundreds/thousands more -->
</mappings>
クライアントはアプリケーションにリクエストを送信し、リクエストに含まれるいくつかのパラメーターに基づいて、いくつかのファイルを返します。上記のマッピング ファイルは、パラメーターを正しいファイルにマップします。要素のpath
属性は、mapping
それらのファイルを含むディレクトリへのファイル パスです。
ファイルを上から下に解析し、一度に 1 つのマッピングを操作します。最悪の場合は O(n) です。のすべてのパラメータが<mapping>
クライアント リクエストのパラメータと一致する場合は、ディレクトリの値を に返しますpath
。
例 クライアント要求
client_identifier = value1
device_identifier = value2
network_identifier = value10213
The third mapping with path=third will be returned because the other mappings don't match network_identifier.
このファイルは、考えられるすべての組み合わせのために膨大な数のマッピングに成長する可能性があるため、解析/比較が高速なデータ構造 (デシジョン ツリー) があるかどうか疑問に思っていました。
ファイル自体は同じ構造を保持する必要がありますが、解析してメモリ内に別の構造を作成できます。