私はIPv6アドレス範囲を格納するのに使うことができる効率的なデータ構造を考えようとしています。検索時間はすばやくする必要があります。つまり、IPv6アドレスを指定すると、どのインターバルから来たのかをすばやく判断できるはずです。ここの私の場合、アドレス範囲は重複しません。IPv6アドレス範囲を読み書きする効率的なデータ構造とは何ですか?
1つの効率的な方法の1つは、単純なバイナリ検索ツリーを作成することであり、各非リーフノードは単に「ルックアップトラフィックをリダイレクトする」ことです。しかし、このアプローチの問題は、BSTのサイズが本当に大きく、おそらく2^128ノードのオーダーであり、ファイルに読み書きできない可能性があります。
したがって、ファイルサイズの上限が低いクイックIPv6アドレスルックアップには、どのようなデータ構造を使用できますか?
私は途中でJavaを使用しています。
あなたは、サードパーティのライブラリを使用することはできますか? GuavaのRangeSetはこれに適しています。 –
範囲が重複しない場合は、ハッシュテーブルを使用できます。 –
私の専門分野ではありませんが、Postgresデータベースにはネイティブ[ネットワークアドレス用のデータ型](https://www.postgresql.org/docs/current/static/datatype-net-types.html)が組み込まれていますが、 [そのようなアドレスを扱う関数](https://www.postgresql.org/docs/current/static/functions-net.html)を提供しています。範囲検索を実行できると推測しています。 –