2014-02-19 4 views
1

오히려 한 데이터베이스 만 사용하는 경우가 있습니다 (PostgreSQL 또는 ElasticSearch). 하지만 현재 프로토 타입 응용 프로그램에서 믹스 (PG 및 ES)를 사용하고 있으며 믹스에서 다른 종류의 dbs를 throw 할 수 있습니다 (예 : redis).여러 SQL/NoSQL 데이터베이스의 일관성/원 자성 (또는 심지어 ACID) 속성 architecture

일부 데이터는 다른 방식으로 각 데이터베이스에 보존되어야한다고 가정 해보십시오. 구성 요소/데이터베이스 중 하나에서 장애가 발생할 경우 어떻게 시스템을 일관되게 유지합니까?

내가 직면 한 시나리오 예 : PostgreSQL에서 데이터 업데이트, ElasticSearch를 사용할 수 없습니다. 두 데이터베이스를 모두 업데이트해야하므로이 시점에서 시스템이 일관성이 없습니다. SQL DB를 사용할 때 트랜잭션을 중단하여 시스템을 이전의 일관된 상태로 만들 수 있습니다.

하지만 시스템을 일관되게 유지하는 가장 좋은 방법은 무엇입니까?

  • 모든 데이터베이스에서 값이 유지 될 때마다 확인 하시겠습니까?
  • 오류가 발생하면 이전 상태로 복원 하시겠습니까? 그러나 일부 NoSQL 데이터베이스에는 트랜잭션/ACID 메커니즘이 없으므로 이전 상태로 쉽게 되돌릴 수 없습니다.

여러 데이터베이스를 동기화해야하는 경우 일종의 "버전"메타 데이터 (타임 스탬프 또는 집에서 버전 번호를 변경했는지 여부)를 추가하는 것과 같은 좋은 습관이 있어야합니다. 데이터베이스가 다시 동기화됩니까? (내장 된 CouchDB에 대해 이야기하지는 않습니다.)

또한 데이터베이스는 모두 원자 적으로 업데이트되지 않으므로 일부 부분이 단기간에 일관성이 없습니다. 나는 그것이 애플 리케이션의 비즈니스에 달려 있다고 생각하지만 누군가가 내 문제가 발생했는지 또는 해결할 수있는 방법에 대해 어떤 생각을 갖고 있는가? 나는 그것이 힘들고 많은 설정에 달려 있다고 생각한다.

이것이 일반적인 아키텍처 문제일지도 모르지만 주제에 대한 정보를 찾는 데 문제가 있습니다.

답변

2

하나의 제품에서 둘 이상의 데이터베이스 기술을 사용하는 것은 불투명하지 말아야한다는 결정입니다. 더 많은 기술을 사용할수록 프로젝트가 개발, 배치, 유지 보수 및 관리에 복잡해질 것입니다. 또한 모든 데이터베이스 기술은 개별 실패 지점이됩니다. 즉, 한 가지 기술을 고수하는 것이 훨씬 더 현명합니다. 즉, 타협을해야한다는 의미 일 때도 있습니다.

그러나 여러 DBMS를 사용하는 좋은 (!) 이유가있을 때 가능한 한 분리 된 상태로 유지해야합니다. 여러 데이터베이스에 걸쳐 관련 데이터를 배치하지 마십시오. 가능하면 하나 이상의 기능이 작동하려면 하나 이상의 DBMS가 필요하지 않습니다. (바람직하게는 DBMS의 실패는이를 사용하는 기능에만 영향을 미칩니다). 두 개의 다른 DBMS에 중복 데이터를 저장하는 것도 피해야합니다.

여러 DBMS에 걸쳐 중복 및 관계를 피할 수없는 경우 하나의 시스템을 single source of truth (일관성과 관련하여 가장 신뢰할 수있는 것이 가장 좋음)으로 결정해야합니다. 시스템간에 불일치가있는 경우 데이터를 SSOT와 동기화하여 해결해야합니다.

+0

내 경우에는 강력한 일관성 보장 + 기존 프레임 워크에 사용하는 주 데이터베이스이므로 SQL 데이터베이스가 필요합니다. 그러나 ElasticSearch의 NoSQL 솔루션은 엄청난 검색 능력을 제공합니다. 주제에 대한 모든 불화를 알고 있습니까? 답변 해 주셔서 감사합니다. (나는 그것을 업 그레 이드 할 수 있었으면 좋지만 15 평판조차 가지고 있지 않다!) – djcoin

+0

여기 나는 당신을 투표 할 수있다! 나는 두려움이 조금 두려워하게 만드는 많은 것들이 있다고 생각되는만큼 대답을 표시하기 전에 다른 대답이 있기를 바랍니다. – djcoin

3
  1. 간단하게하십시오.
  2. 검색 엔진은 때때로 뒤떨어 질 수 있습니다.너는 싸울지도 모른다. 당신은 그것을 받아 들일 수 있습니다. 괜찮아요. 대부분의 경우 허용됩니다.
  3. 데이터를 혼합하지 마십시오. 세션에 Redis를 사용한다면 - 좋습니다. 데이터베이스 A의 내용을 B에 저장하지 말고 그 반대의 경우도 마찬가지입니다.
  4. ACID 및 귀하의 Super Important Business Data ™ ®에 대한 강력한 일관성을 갖춘 적절한 데이터베이스를 선택하십시오.
  5. 다시 데이터를 혼합하지 마십시오.