SQL Server와 Mongo를 함께 사용할 수 있습니까?


14

웹 트래픽이 많은 대형 뉴스 중심 사이트가 있습니다. 아키텍처는 종종 DB-Repo Layer-Services Layer-Asp.Net MVC입니다. 우리가 본 문제는 읽기 성능과 관련이 있습니다. 이론상으로이 모든 DDD 도메인 객체는 훌륭하지만 비즈니스 성능을 높이는 데 어려움을 겪는 것으로 나타났습니다.

해결책으로, noSQL을 사용하는 완전히 새로운 것을 고려하고 있습니다. 웹 사이트에 표시되는 데이터에 noSQL 데이터베이스를 사용하고 싶습니다. 우리는 SQL Server를 제거 할 수는 없지만 (적어도 곧은 아니지만) 실용적인 단계는 Mongo를 모든 새로운 개발에 대한 쿼리 데이터베이스로 사용하는 것 같습니다.

내 질문은 SQL Server를 레코드 데이터베이스로 사용하고 Mongo를 쿼리 데이터베이스로 함께 사용할 수 있는지 여부입니다 .

따라서 편집기 중 하나가 레코드를 업데이트하면 데이터가 SQL Server에 저장됩니다. 밤새 다시 작성할 수없는 레거시 코드가 너무 많기 때문에이 작업이 필요합니다.

그러나 웹 사이트의 뷰어가 기사 또는 기사 목록을 볼 때 Mongo와 SQL Server의 성능을 활용하고 싶습니다. 데이터를 최신 상태로 유지하려면 15 분 이하라고 가정하면 SQL Server 데이터는 Mongo를 새로 고쳐야합니다. RDBMS에는 이와 같은 작업을위한 복제 도구가 있으며 SQL Server에서 Mongo까지 동일한 작업이 있는지 궁금합니다. Lync 서버?


3
가능한? 물론 두 개의 개별 데이터 저장소로 가능합니다. 여기서 정확히 무엇을 묻고 있습니까?
Oded

그러나 당신은 그것들을 함께 사용할 수 있습니까? Mongo DB가 기본적으로 데이터의 읽기 전용 캐시로 작동합니까?
John

1
다시, 물론 "함께 사용"할 수 있습니다. 그러나 그것이 무엇을 의미하는지는 명확하지 않습니다. mongo에 대한 일종의 업데이트 메커니즘이 있으면 계속 사용할 수 있습니다. 우디 다한 의 게시물을 참조하십시오 -그러나 메커니즘을 정의하는 것은 당신에게 달려 있습니다.
Oded

1
우리는 결코 MongoDB로 이사하지 않았지만 내년에는 우리처럼 보일 것입니다. 우리가 한 전환 적 방법 중 하나는 JSON을 varchar 필드에 저장하는 것입니다. 내가 읽은 모든 것에서 NoSQL과 SQL 사이에서 데이터를 앞뒤로 이동할 수있는 좋은 방법은 없습니다. 특히 NoSQL 데이터베이스가 수행하는 방식이 크게 다르기 때문에 모두 사용자 정의해야합니다. .
John

1
@John 관계형을 고수하고 SQL Server에서 벗어나려는 경우 Postgresql과 json 통합 을 살펴볼 수 있습니다 . 따라서 데이터를 json 열에 저장하면 데이터베이스 내에서 조작 할 수 있습니다.

답변:


13

읽기 전에 최적화 된 데이터베이스는 쓰기 효율성에 거의 좋지 않으며 그 반대도 마찬가지입니다. 이 읽기-쓰기 장애로부터 발전된 한 가지 접근법은 CQRS (Command Query Responsibility Segregation)입니다. Wikipedia에도 불구하고 CQRS와 CQS는 기술적으로 다릅니다. CQS는 단지 메소드가 변경 (명령)을하거나 정보를 요청 (질의) 할 것을 요구합니다.

CQRS는 한 단계 더 나아가 쿼리 및 명령에 대한 별도의 모델이 있음을 지정합니다. 이 단일 단계를 통해 읽기 및 쓰기 데이터베이스 분리와 같은 작업을 수행 할 수 있습니다. 당신이하고 싶은 것입니다.

나는 Mongo의 전문가이거나 SQL Server와 함께 작동하도록 구성한다고 말할 수 없습니다. 그러나 사람들은 몽고를 거래 데이터베이스에 대한 비정규 화 된 관점으로 사용합니다. 트랜잭션 DB에서 Mongo를 업데이트하면 SQL 에이전트가 실행될 수 있습니다. 또는 데이터베이스를 폴링하는 별도의 서비스가 있습니다.

더 좋은 대안은 커맨드 서비스가 업데이트 될 때마다 이벤트를 발생시키는 것입니다. 그런 다음 해당 이벤트를 수신하고 해당 정보로 MongoDB를 업데이트하는 서비스를 갖게됩니다. 이것이 이벤트 소싱에 대한 기본적인 접근 방식입니다 (페이지에서 이벤트 소싱 검색).

DDD 세계의 사상가 중 한 명인 Greg Young은 Fowler Signature Series에서 CQRS ( Event-Centric) ( CQRS라고 함)에 관한 책을 쓰고 있습니다. 파울러는 자신 의 접근 방식을 설명 하는 글을 그의 글에 게시했습니다.


+1 CQRS가 여기에 잘 맞습니다. 이벤트를 사용하여보기 작성에 사용 된 문서 데이터베이스를 채우고 업데이트하고 SQL 데이터베이스를 그대로 둡니다.
quentin-starin

우리는 CQRS 시스템을 채택하지 않았지만 Greg, Udi 및 다른 사람들이 작성한 것에주의를 기울였습니다. CQRS의 큰 부분은 특정 플랫폼이 아니라 명령과 쿼리를 별도로 생각하는 것입니다. 그레그가 마이크로 소프트 패턴과 프랙티스가 책을 공개했지만 책을 쓰지 않았다고 생각합니다.
John

1
이 답변에 추가 할 유일한 것은 : 유스 케이스가 MS SQL 및 MVC와 함께 이것을 사용하는 것과 관련이 있다면 NoSQL 부분에 MongoDB 대신 BrightstarDB 를 고려 했습니까? Entity Framework 및 LINQ 호환성이있어 전환이 쉬워 질 수 있습니다.
CrazyPyro

1

예. 현재 프로젝트에서 데이터를 가져 와서 SQL Server에 저장 한 다음 Lucene / Solr을 사용하여 검색 색인을 작성하고 MongoDB에 저장합니다. 그러나 MongoDB 채우기는 SQL Server 복제 또는 자동 새로 고침이 아닌 사용자 지정 로더로 수행됩니다.


좋아, 그냥 궁금해서, 왜 몽고를 직접 채우지 않겠 어? 당신은 동일한 제약을 받고있다 가진 모두를 사용할 수 있나요?
yati sagade

기존 SQL Server는 밤새 다시 쓸 수 없습니다. 내 생각은 이것이 작지만 유용한 아기 발걸음이라고 생각합니다.
John

@yatisagade : 그렇습니다. SQL Server에 대해 실행해야하는 보고서가 있지만 Lucene 색인을 사용하는 전역 검색 앱이 있습니다.
TMN
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.