두 개의 큰 정렬 된 배열간에 다른 점을 찾는 효율적인 방법을 찾아야합니다. 다른 말로하면,과의 비교를 기반으로 그들 중 하나에서 추가/삭제 된 내용이 인 것을 찾아야합니다. 정렬은 선택 사항입니다. 따라서 주문이없는 무언가를 달성 할 수 있다고 생각하면 저와 잘 맞습니다.두 개의 매우 큰 정렬 된 배열을 효율적으로 비교하십시오.
이 두 배열은 각각 백만 요소 길이이므로 을 메모리에서 동시에 비교할 수 없습니다.
배경은 간단합니다. 새로운 것을 알리는 방법이없는 원격 레거시 SQL (OpenEdge) 테이블에서 모든 새 행을 가져 오려고합니다. 나는 이상하게 들릴지도 모른다는 것을 알고 있습니다. 그러나 그것은 제가 작업하고있는 현실입니다. 데이터에 대한 트리거가 없으며 시간 소인도없고 아무 것도 없습니다. 이것은 다른 StackOverflow 스레드에서 해결되었습니다. 이 기능을 원격 테이블에 추가하는 방법을 찾고 있지 않습니다.
나는 비교를 돕기 위해이 테이블을 내 PostgreSQL 로컬 데이터베이스에 가지고 있습니다. 나는 네트워크를 통해 비교를하고 JDBC 드라이버로 jRuby를 사용하여 원격 데이터를 검사한다. 지금까지 두 테이블을 Ruby 배열에로드하고 표준 array - array
을 만들려고했지만 너무 많은 메모리가 필요했습니다 (테이블은 각각 백만 행입니다).
다른 옵션을 고려해 볼 수 있습니까? 내가 모르는 어떤 알고리즘?
한 번에 전체 배열을 가지고 있지 않다는 것을 기억하십시오. 현재 내가하고있는 일은 한 번에 각각 1000 개의 요소를 비교하는 것입니다. 어쩌면 내 질문을 분명히 할 필요가있다. –
@n_x_l 아무 것도 쓰여지지 않고 지정되지 않은 것을 기억하지 못합니다 ... –
@n_x_l 여전히 알고리즘을 통해 배열의 조각을 전달하더라도 알고리즘은 계속 작동해야합니다. –