2012-12-04 6 views
0

매우 큰 카운터 시스템을 구축 중입니다. 분명히하기 위해 시스템은 데이터 스트림 (약 50 억 ~ 1 억 개의 크기)에서 도메인이 발생하는 횟수를 계산합니다.원자 카운터 Postgres 대 MongoDB

시스템은 각 요소를 개별적으로 처리하고 해당 도메인의 카운터와 처리 날짜에 대한 데이터베이스 요청을합니다. 구조는 다음과 같습니다 :

stats_table (or collection) 
----------- 
id 
domain (string) 
date (date, YYYY-MM-DD) 
count (integer) 

초기의 암시는 원자 카운터 기능 때문에 MongoDB를 사용하는 것이 었습니다. 그러나 내가 그것에 대해 더 생각했을 때, 나는 Postgres 업데이트가 이미 원자 적으로 발생했다는 것을 알았다. (최소한 this question이 나를 믿게 만든다.)

내 질문은 여기 있습니다 : 하나 이상의 데이터베이스를 다른 곳에서 사용하면 어떤 이점이 있습니까? 하루에 약 5 백만 개의 도메인을 처리한다고 가정 할 때 여기에서 고려해야 할 핵심 사항은 무엇입니까?

답변

4

Postgres의 모든 단일 작업은 자동으로 트랜잭션으로 래핑되고 MongoDB의 단일 문서에 대한 모든 작업은 원 자성입니다. Atomicity는이 경우에 하나의 데이터베이스를 다른 데이터베이스보다 선호하는 이유는 아닙니다.

개개의 카운트가 꽤 높을 수 있지만 카운트의 각 인스턴스가 아닌 집계 카운트 만 저장하는 경우 총 레코드 수는 너무 중요하지 않습니다. 수백만 개의 도메인을 추적하더라도 Mongo 또는 Postgres가 똑같이 잘 작동합니다.

MongoDB는 이벤트 로깅을위한 좋은 솔루션이지만, 수집하는 분석 데이터에 대한 흥미롭고 관계형 분석을 많이하고 싶다면 Postgres를 사용하는 것이 좋습니다. Mongo에서 이렇게 효율적으로 수행하려면 비정규 화 수준이 높아야하므로 앞으로 데이터를 어떻게 사용할 것인지에 대해 더 많이 생각할 것입니다.

+0

마이클에 감사드립니다. 훌륭한 조언 ... 데이터를 어떻게 사용하는지에 관해서는 비교적 간단합니다. 집계 요청이있을 것입니다 (즉, 도메인 X에 대한 모든 계산을 얻습니다). 그리고 나서 또한 성장률을 계산할 것입니다. 그게 진짜입니다. 나는 이론 상으로는 (도메인 당 평균 개수와 같은) 더 깊은 분석을 할 수 있다고 생각하지만, 지금은 내 의도가 아닙니다. –