2009-10-15 2 views
1

나는 많은 Geodata 객체 (name, postalCode, lat, lon)를 만들었습니다. 이제는 다른 항목을 나중에 검색하기 위해 컬렉션에 추가하려고합니다.컬렉션의 검색/쿼리

모든 것이 objectOriented/in-memory에서 일어나야하므로 관계형 데이터베이스가 필요하지 않습니다. 무엇 수집하기위한 최선의 하나입니다

  • 이름으로 위도 및 경도 찾기 또는 PLZ
  • 이 LAT1, LAT2 및 LON1 사이의 개체를 찾기 LON2

:

이러한 쿼리는 같은 것이 보인다 그러한 "단순한"데이터 구조?

이러한 쿼리에는 어떤 복잡성이 필요합니까? 멀티 스레딩이 도움이 될 수 있습니까? 그렇다면 스레드 안전을 위해 어떤 컬렉션이 사용됩니까?

키 => 값 데이터베이스에 이러한 쿼리를 쓸 수 있습니까?

답변

4

메모리 내 데이터베이스을 사용할 수 있습니다.

이 관계형 데이터베이스는 이와 같은 관계형 쿼리에 대한 좋은만큼 좋은 .... :-)

집에서 만든 자바
순수 , 당신이 사용할 수에 대한

:

  1. , 키 이름은
  2. Map이며, 키는 pls입니다.
  3. List<List<"object">> 첫 번째 목록의 LAT, 두 번째 목록의 LON
    둘 다 정렬되므로 이진 검색을 사용하여 값을 검색하고 subList을 사용하여 간격을 효율적으로 반환 할 수 있습니다.

이러한 모든 경우에 동일한 인스턴스 개체를 다시 사용할 수 있기 때문에 키에 대한 복제는 있지만 모든 개체에 대한 복제는 아닙니다.

멀티 스레드 화 (다른 이유 때문에 필요하다면)이지만 단일 검색의 성능을 향상 시키려면이 기능을 도입 할 필요가 없습니다. 언급 된 데이터 구조는 밀리 세컨드 이내에 정답을 제공해야합니다!

스레드 안전성은 유스 케이스가 읽기 전용 인 것으로 보이므로 이러한 데이터 구조에서는 문제가되지 않습니다. 경우에 따라 "개체"를 수정해야하는 경우에는 검색에 사용되는 데이터 구조가 아닌 "개체"자체 만 보호 할 수 있습니다.

+0

나는 순수한 자바로이 문제를 해결하고 싶다! 정렬 된 구조가 좋은 것처럼 보입니다. 위도/경도 비교 자로 정렬 된 평면 개체가있는 트리를 사용하는 것이 더 좋지 않습니까? 또한 100.000 이상의 항목이 있으므로 쿼리에 밀리 초 미만의 정보가 필요한지 잘 모르겠습니다. –

+1

@Martin -'HashMap'과 같은'Map'의 구현은 매우 효율적입니다.지도에 100.000 개 이상의 항목이 포함되어 있어도 밀리 초 이내에 쉽게 찾을 수 있습니다. – Jesper

+0

subSet 메서드를 사용하는 합성 키 및 트리 집합을 사용하는 더 좋은 솔루션이 있습니까? –