문제

데이터베이스를 사용하여 일부 LAT/긴 결과를 클러스터링하여 응용 프로그램으로 전송 된 결과 수를 줄이는 방법을 알고 있는지 확인하려고합니다.

클라이언트 측 또는 서버 (응용 프로그램) 측면에서 클러스터하는 방법에 대한 여러 리소스가 있습니다. 그러나 데이터베이스 측면에는 없습니다.

이것은 비슷한 질문입니다, 동료 So 회원이 물었다. 솔루션은 서버 측 기반 (예 : C# 코드 뒤)입니다.

이 문제를 해결하는 데 행운이나 경험이 있었지만 데이터베이스에서 경험이 있습니까? 호트와 섹시한 DB 챌린지 후에는 데이터베이스 전문가가 있습니까?

도와주세요 :)

편집 1 : 설명 - 클러스터링으로 그룹을 바라고 있습니다. x 지역의 경우 단일 지점으로의 포인트 수. 따라서 클러스터를 1 마일 / 1km 정사각형으로 클러스터라고 말하면 '정사각형'의 모든 결과는 단일 결과 (예 : 정사각형의 중간)로 그룹화됩니다.

편집 2 : MS SQL 2008을 사용하고 있지만 다른 DB에 다른 솔루션이 있다면 청각에 열려 있습니다.

도움이 되었습니까?

해결책

아마 수정 된* 버전을 사용할 것입니다 케이-클러스터링 직교 (예 : WGS-84 ECF) 사용 요점에 대한 좌표를 사용합니다. 빠르게 구현하고 수렴하기 쉽고 데이터가 어떻게 생겼는지에 관계없이 데이터에 적응합니다. 또한, 당신은 선택할 수 있습니다 케이 대역폭 요구 사항에 맞게, 각 클러스터는 동일한 수의 관련점 (모드 k)을 갖습니다.

클러스터 중심 테이블을 만들고 원래 데이터 테이블에 필드를 추가하여 어떤 클러스터가 속하는 클러스터도 표시합니다. 데이터가 전혀 동적 인 경우 클러스터링을 주기적으로 업데이트하려고합니다. 저장된 절차 및 트리거로 그렇게 할 수 있는지 모르겠지만 아마도 가능합니다.

*"수정"은 계산 된 중심 벡터의 길이를 조정하여 지구 표면에 있도록하는 것입니다. 그렇지 않으면 당신은 부정적인 고도가있는 많은 지점으로 끝납니다 (LLH로 다시 변환 될 때).

다른 팁

지리적 위치를 클러스터링하고 있고 다른 것이 있다고 생각할 수 없다면 :-), 당신은 LAT/긴 코디네이터와 함께 데이터베이스에 "클러스터 ID"를 저장할 수 있습니다.

내가 의미하는 바는 세계지도를 100x100 매트릭스 (10,000 클러스터)로 나누는 것입니다. 각 좌표는 해당 클러스터 중 하나에 할당됩니다.

그런 다음 인접한 사각형의 정사각형을 선택하여 동일한 사각형과 적당히 닫는 좌표를 선택하여 매우 밀접한 좌표를 감지 할 수 있습니다.

정사각형의 크기 (따라서 그 수)는 클러스터링이 얼마나 정확한 지에 따라 결정됩니다. 분명히, 당신이 2x2 매트릭스 만있는 경우, 먼 길을 멀리하는 코디네이트의 클러스터링을 얻을 수 있습니다.

Yo는 항상 두 개의 점이 서로 가까워 지지만 다른 클러스터 (클러스터의 가장 북쪽으로, 다른 하나는 남쪽으로 남쪽으로)와 같은 가장자리 케이스가 있지만 클러스터 크기를 조정할 수 있습니다. 또는 클라이언트 측의 결과를 사후 처리합니다.

지리적 응용 프로그램에 대해 비슷한 작업을 수행하여 포인트 포인트를 쉽게 캐시 할 수 있도록하고 싶었습니다. 내 지리 해시 코드는 다음과 같습니다.

def compute_chunk(latitude, longitude)
  (floor_lon(longitude) * 0x1000) | floor_lat(latitude)
end

def floor_lon(longitude)
  ((longitude + 180) * 10).to_i
end

def floor_lat(latitude)
  ((latitude + 90) * 10).to_i
end

거기에서 모든 것이 정말 쉬워졌습니다. 주어진 지점에서 주어진 반경으로 모든 덩어리를 잡는 코드가 있었는데,이 반경까지는 단일 Memcache 멀티 펫으로 변환됩니다 (그리고 누락되었을 때 백필을위한 일부 코드).

을 위한 movielandmarks.com 클러스터링 코드를 사용했습니다 마이크 퍼비스, 저자 중 하나 PHP 및 AJAX로 Google 매핑 애플리케이션을 시작합니다. PHP와 MySQL을 사용하여 다른 줌 레벨에 대한 클러스터/포인트의 나무를 구축하여 데이터베이스에 저장하여 리콜이 매우 빠릅니다. 다른 데이터베이스를 사용하더라도 일부는 유용 할 수 있습니다.

여러 접근 방식을 테스트하지 않는 이유는 무엇입니까?

  1. 번역 Weka .NET CLI의 라이브러리 ikvm.net
  2. 코드 및 Weka.dll (Ilmerge 사용)에서 데이터베이스에 결과를 추가하십시오.

몇 가지 테스트를하십시오. 특정 클러스터링은 다른 사람보다 더 잘 작동하지 않습니다.

나는 당신이 사용할 수 있다고 생각합니다 MSSQL의 공간 데이터 유형. 내가 아는 다른 공간 데이터 유형과 유사하다면, 당신의 포인트를 사각형 나무에 저장 한 다음, 하부 해상도 직사각형으로 이동하여 암시 적 클러스터를 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top