2011-12-15 2 views
2

나는 데이터를 MongoDB 데이터베이스에 저장하는 시스템을 가지고있다. 이제 Microsoft SQL Server 2008에 저장된 대규모 데이터 세트를 사용하여 데이터 (각 레코드의 12 개 필드)를 결합해야합니다. 어떻게 수행합니까?MongoDB의 데이터를 SQL Server에 가입시키는 방법은 무엇입니까?

두 데이터베이스는 항상 데이터를 누적하며 쿼리에는 항상 최신 데이터가 포함되어야합니다 (지연 시간은 몇 분입니다). MongoDB에서 하루에 수천 건의 신규 또는 업데이트 된 레코드를 기대하고 있으며 SQL Server 데이터베이스를 수정할 수 없습니다.

한 가지 해결책은 MongoDB의 새로운 데이터와 업데이트 된 데이터를 SQL Server의 새 데이터베이스에 동기화 한 다음 쿼리를 만들고 거기에 조인하는 것입니다. 동기화가 필요한 도구가 있습니까? 응용 프로그램 수준에서 수행해야합니까? 불일치로 이어지는 SQL 서버의 (드문) 가동 중지 시간을 준비하는 방법은 무엇입니까?

+0

그냥 궁금해서, 둘 다 왜 사용하고 있습니까? 하나에서 다른 것으로 전환 ..? – alessioalex

+0

나는 매우 가변적 인 데이터 (그러므로 MongoDB)와 다른 프로젝트/시스템 (SQL 서버가 더 잘 작동하는)을 위해 수집 된 변수가 적은 데이터를 가지고있다. – mikkohei13

답변

3

먼저 데이터 선택 방향을 살펴 보겠습니다. 주어진 Mongo 문서의 모음이 있고 그와 관련된 모든 SQL Server 데이터를 원할 경우 컬렉션이 크지 않고 기준이 복잡하지 않으면 기존 루프 만 사용하면됩니다.

반면에 조인 기준이 매우 복잡하고 결합 된 경우 (즉, 모든 Mongo 문서와 SQL Server 행 및 많은 필드와 열에 걸쳐) SQL Server 만 실제로 적절한 인덱스가 제공됩니다.

mongoexport 변경된 문서 모음을 CSV로 내 보낸 다음 SQL Server에서 upsert를 수행 한 다음 네이티브 SQL에서 조인을 수행 할 수 있습니다. 기존 SQL 데이터베이스에서 동일한 서버의 다른 데이터베이스로 조인하는 것은 일반적으로 고성능입니다. 처음에는 보안 검사에 약간의 오버 헤드가 있습니다.

0

이것은 ETL 도구의 일반적인 작업처럼 보입니다. MongoDB & SQLServer에서 데이터를 내보내고 외부 도구에 연결 한 다음 다시로드하거나 필요한 작업을 수행합니다. 증가분에 관해서는, 당신이 일종의 타임 스탬프를 유지하는지 아니면 마지막 시간 이후에 "새로운"것을 발견 할 수있게 해주는 것이 든에 달려 있습니다. 요즘 ETL 도구는 매우 빠르므로 "트랜잭션"모드로 거의 실행할 수 있습니다.

예를 들어 CloverETL을 볼 수 있습니다. 이 블로그 게시물은 두 개의 다른 MongoDB 컬렉션에 가입하는 방법을 설명합니다. 귀하의 경우, 하나의 컬렉션 읽기가 SQLServer 테이블 읽기 (ETL 기술의 장점)로 대체 될 수 있습니다 : http://blog.cloveretl.com/joining-multiple-mongodb-collections-in-cloveretl

관련 문제