2010-03-19 2 views
23

내 응용 프로그램의 일부로 MongoDB를 사용해야하는 좋은 이유가 있습니다. 그러나 사람들은 일반적으로 트랜잭션이 정확하고 일관성이 있어야하는 은행과 같은 "트랜잭션"응용 프로그램에 적합하지 않다고 설명합니다.동일한 레일 애플리케이션에서 mongodb와 mysql을 모두 사용하는 것이 합리적입니까?

모델을 레일스로 분할하고 일부를 사용하는 것이 합리적입니까? MySQL과 다른 사람 mongo? 아니면 이것이 일반적으로 가치가있는 것보다 더 많은 문제를 일으킬 것입니까?

나는 은행 업무용 앱 등을 만들지는 않지만 내 사용자의 테이블 또는 거래 테이블 (매출 기록)이 MySql에서 해당 부분을 수행하는 것이 합리적이라고 생각했습니다.

답변

23

이것이 바로 CouchDB 및 PostgreSQL에서의 작업입니다.

모든 사용자 및 그룹 종류의 것들이 postgresql 데이터베이스에 있습니다.
다른 모든 경우 (통계적 데이터가있는 일부 레코드)는 couchdb 데이터베이스에 있습니다.

우리의 경우 클라이언트 당 하나의 couchdb 데이터베이스를 가질 수 있습니다 (앱은 사용자 호스트 중 하나 또는 다른 호스트에 연결됩니다).
하나의 postgresql 데이터베이스에 모든 사용자가 있습니다.

그래, 나는 같은 응용 프로그램에서 SQL과 NOSQL 데이터베이스를 갖는 것이 좋습니다.

+2

실제 예를 들어 주셔서 감사합니다. –

+1

CouchDB 커넥터를 사용하고 있습니까, 아니면 REST를 통해 직접 전화를 걸고 계십니까? 나는 둘 다 잘 사용하는 시나리오를 가지고 있고 호출이 꽤 많이 검색되고 실행되기 때문에 Active Record 레이어가 중간에 가치가 있는지 확신 할 수 없습니다. – eddieroger

3

나는 그것을 제외하지 않겠지 만 분할 접근 방식에주의해야합니다.

당신이 MySQL + InnoDB를 필요로한다면 나는 MongoDB가 가져 오는 이익에서 중요한 것을 얻고, 핵심 MySQL 테이블과 최소한의 관계가있는 격리 된 부분만을 위해 MongoDB를 소개 할 것입니다 .

저는 MySQL에서 20ish 테이블이있는 레일즈 애플리케이션과 동일한 문제에 대해 현재 분투하고 있습니다. MongoDB를 사용하는 일부 데이터베이스 설계 비애 (중첩 된 하위 개체 및 색인 배열 열 특히)를 해결하지만,의 추가 오버 헤드 정당화하기 어려운 것입니다 :

  • 어색한 사용자 지정 코드의 솔기를 따라

    • 2 개 개의 다른 쿼리 방법을 서로 관련된 MySQL/Mongo 객체.
    • 프로덕션을 지원하는 두 번째 데이터베이스 플랫폼.

    로깅 테이블에서 MongoDB를 배포하는 중입니다. 거기에서 가져 가려고합니다.

  • 2

    나는 여기에 자신의 질문에 대답했습니다.

    내 응용 프로그램의 일부로 mongodb 을 사용해야하는 좋은 이유가 있습니다.

    다른 부분을 MySQL로 유지해야하는 충분한 이유가 있다고 가정 할 때 대답은 '예'라고 가정합니다. 귀하의 질문은 (적어도 저에게) 당신이 다양한 옵션과 장단점을 잘 이해하고 연구했기 때문에 귀하의 모델을 분할하는 것이 가능하다는 점에서 합리적인 결론에 이르렀 음을 의미합니다.

    두 가지 반쪽이 어떤 식 으로든 연결되어 있지 않다고 가정하면 (나중에 두 가지 소리의 관계가 고통에 대한 처방처럼 들리는 경우), 나는 최선을 다해 각 도구를 사용하는 것이 좋습니다.

    Michael이 이러한 접근 방식으로 제기 한 우려 사항을 해결할 수 있습니다. Rails 사용에 초점을 맞추고 있기 때문에 MySQL 기반 모델에 ActiveRecord를 사용하고 MongoDb 기반 모델에 MongoMapper을 사용할 수 있습니다. 이렇게하면 MongoMapper가 매우 ActiveRecordish 방식을 제공하므로 완전히 다른 두 가지 쿼리 방법을 다룰 필요가 없습니다. 물론 필요할 때마다 Mongo 관련 쿼리를 쉽게 드롭 다운 할 수 있습니다.

    DB 간 관계에 대한 우려는 제 의견으로는 유효합니다. 그리고 이것이 당신이 많은 것을 끝낼 것이라면, 나는 이것이 당신이 행복하게 살기 좋은지 확인하기 위해 상황을 조사 할 것을 조언 할 것입니다 와. 나는 당신이 그 특별한 경우에 나중에 많은 고통을 덜어 줄 것이라고 상상합니다.

    전반적으로 두 개의 반쪽이 상대적으로 연결이 끊어져있는 한 분할 된 특성의 지속성 계층이 적합 할 것이라고 제안합니다.

    4

    내구성에 대해서도 생각하십시오 : http://blog.mongodb.org/post/381927266/what-about-durability, 예를 들어 전원 (전기)이 끊긴 경우입니다.

    +0

    이것은 많은 유형의 앱에 대한 거래 차단기입니다. Mongo는 중요하지 않은 대량의 데이터를 처리하는 데 매우 적합합니다. –

    +0

    쿨, 좋은 지적 - –

    5

    사용자 테이블을 MongoDB에 보관할 이유가 없습니다. MongoDB에 트랜잭션 테이블을 유지하기로 결정했는지 여부도 또 다른 질문입니다. 다중 객체 트랜잭션이 필요한 경우 트랜잭션을 지원하는 관계형 데이터베이스를 사용해야합니다. 이 트랜잭션 스타일이 필요 없다면 MongoDB를 사용하는 것이 여전히 좋은 생각입니다.

    MongoDB를 사용하는 경우 장애 조치를 위해 복제를 실행하는 것이 좋습니다.

    일관성 보장 때문에 관계형 데이터베이스를 사용하는 경우 하드웨어가 해당 기능을 사용하도록 구성되어 있는지 확인해야합니다. 여기에주의 참고 사항을 참조하십시오 :이주의 사항을 복용하지 않는 경우

    http://dev.mysql.com/doc/refman/4.1/en/innodb-configuration.html

    , 다음 MongoDB를의 내구성과 관계형 데이터베이스의 사이에 큰 차이가 없습니다.

    +0

    와우 - MySql의 경우는 그다지 알지 못했습니다. 정보 주셔서 감사합니다! –

    관련 문제