1

多くの Geodata オブジェクト (名前、郵便番号、緯度、経度) を作成しました。後で別のエントリを検索するために、それらをコレクションに入れたいと思います。

すべてが objectOriented/in-memory で行われる必要があるため、リレーショナル データベースは必要ありません。

このようなクエリは次のようになります。

  • 名前またはplzで緯度と経度を検索
  • LAT1、LAT2 と LON1、LON2 の間のオブジェクトを検索

このような「単純な」データ構造に最適なコレクションはどれですか?

そのようなクエリにはどの程度の複雑さが必要ですか? マルチスレッドはメリットになるでしょうか? もしそうなら、どのコレクションがスレッドセーフのために最も良く使われていますか?

そのようなクエリを key=>value データベースに書き込む機会はありますか?

4

1 に答える 1

4

インメモリデータベースを使用できます。

リレーショナルデータベースはこれらのようなリレーショナルクエリに適しているので、これは良いことです.... :-)


自家製の純粋なJavaの場合、次を使用できます。

  1. Map、名前をキーとして
  2. Map、plzをキーとして
  3. List<List<"object">>最初のリストはLAT、2番目のリストはLONです。
    両方ともソートされているため、それぞれについて、binary-searchを使用して値を検索し、。を使用して間隔を効率的に返すことができますsubList

これらすべての場合に同じインスタンスオブジェクトを再利用できるため、これはキーの重複になりますが、すべてのオブジェクトの重複にはなりません。

マルチスレッドは許容されますが(他の理由で必要な場合)、単一検索のパフォーマンスを向上させるためにマルチスレッドを導入する必要があるとは思えません。上記のデータ構造は、1ミリ秒未満で正しい答えを提供するはずです!

ユースケースは読み取り専用のように見えるため、これらのデータ構造ではスレッドセーフは問題になりません。場合によっては「オブジェクト」を変更する必要がある場合は、検索に使用されるデータ構造ではなく、「オブジェクト」自体のみを保護できます。

于 2009-10-15T12:22:32.623 に答える