답변의 상당 부분은 수집 한 후에 무엇을하고 싶은지에 따라 달라집니다. 많은 양의 데이터를 저장하는 것은 간단합니다. 로그 파일에 넣기 만하면되므로 데이터베이스가 필요 없습니다. 반면에 복잡한 분석 및 데이터 마이닝을 수행하려는 경우 데이터베이스가 유용합니다.
다음 질문은 당신이 어떤 분석을 할 것인지입니다. 특정 속성이있는 데이터의 하위 집합, 마지막 시간/일/주/월에서만 데이터가 집계되거나 사전 계산 될 수 있습니까? 즉, 수집 된 형태로 전체 데이터 세트에 액세스해야합니까? 너무 오래되어서 재미있을 때 데이터를 보관할 수 있습니까? 데이터를 집계하고 집계에 대한 분석을 수행 할 수 있습니까?
광고 분석 (광고 노출에 관한 수십억 데이터 수집)에서의 경험으로 집계가 중요합니다. 원시 데이터를 수집하고 위생 처리 한 다음 MongoDB, Cassandra 또는 MySQL과 같은 데이터베이스에 저장하여 업데이트 및 쿼리를 수행 할 수 있습니다. 그런 다음 주기적으로 데이터를 집계하여 데이터베이스에서 제거합니다 (그러나 원시 데이터는 보관해야하며 나중에 필요할 수 있습니다).
집계는 기본적으로 데이터에 대해 묻고 싶은 모든 질문을 묻고 특정 질문에 대한 대답을 쉽게 검색 할 수있는 형식으로 저장합니다. 어떤 요일에 가장 많은 X가 있는지 알기를 원한다고 가정 해보십시오. 이렇게하면 순식간에 모든 기록 된 신호를 거대한 테이블에 보관하고 X가있는 모든 행을 합한 쿼리를 수행하게됩니다. 수집 된 수 신호가 커지면이 쿼리는 더 오래 걸릴 것입니다. 인덱싱, 샤딩 또는 최적화가 필요하지 않습니다. 매일/시간/분 (정확한 사용 사례와보고가 필요한 최신 상태에 따라)에 기록한 새 신호를보고 모든 X에 대해 얼마나 많은 신호를 추적하는지 카운터를 증가시킵니다 X 월요일에 월요일, tuesdays면 화요일 등등 있었다. 그런 식으로 나중에 각 요일에 대한 카운트를 검색하고 비교할 수 있습니다. 대답 할 수있는 모든 질문에 대해이 작업을 수행 한 다음 데이터베이스에서 신호를 제거합니다 (단, 원시 데이터는 유지해야합니다).
집계를 기록하는 데이터베이스 유형은 들어오는 신호를 저장하는 데이터베이스 유형과 같을 수 있지만별로 멋지다고 할 필요는 없습니다. 특정 답변을 나타내는 키와 보통 숫자 인 값을 저장합니다.
들어오는 신호를 저장하는 데이터베이스를 말하는 구식 데이터웨어 하우징에서는 OLTP (온라인 트랜잭션 처리 용)라고하며 집계를 저장하는 데이터베이스를 OLAP (온라인 분석 처리 용)이라고합니다.OLTP는 삽입에 최적화되어 있으며 OLAP은 쿼리에 최적화되어 있습니다. 용어는 오래되었고 사람들이 그 단어를들을 때 SQL과 별표와 그 모든 것을 즉시 생각하는 경향이 있습니다. 아마도 나는 그들을 사용해서는 안되지만, 그들은 편리한 용어입니다.
어쨌든 OLTP의 경우 데이터를 빠르게 삽입 할 수있을뿐만 아니라 데이터를 인덱싱하고 사물을 검색 할 수있는 기능이 필요합니다. 집계는 최대 값과 최소값을 합산하고 찾아내는 작업의 절반을 수행하는 데이터베이스에 크게 도움이됩니다. MongoDB는 설치와 작업이 매우 쉽기 때문에 정말 좋아합니다. 내가 작업하는 데이터는 지저분 해지고 모든 항목이 동일한 속성 집합을 갖는 것은 아니기 때문에 Mongo의 관대 한 스키마가없는 것이 장점입니다. 반면에 데이터는 훨씬 더 균일하게 들리므로 Mongo는 아마도 당신에게 많은 이점을주지 않을 것입니다. 아직 좋은 관계형 데이터베이스를 간과하지 마십시오. 합계를 많이하는 등의 작업을 수행한다면 SQL은 훌륭합니다.
OLAP의 경우 훨씬 간단한 작업으로 키 - 값 저장소 만 있으면됩니다. Redis는 너무 쉽게 작업하고 설정하기가 쉽기 때문에 Redis를 사용합니다. 또한 스칼라 값 이상을 저장할 수 있으므로 편리합니다. 때로는 값이 실제로는 목록 또는 해시 인 경우가 대부분의 키 - 값 저장소에서 이러한 값을 인코딩해야하지만 Redis는 기본적으로이 값을 처리합니다. Redis의 단점은 쿼리를 수행 할 수 없다는 것입니다 ("Y에 대해이 값을 가진 모든 행을 제공함"). 데이터에 대한 인덱스를 직접 유지해야합니다. 반면에 모든 질문에 대한 답변이 미리 계산 된 이후에는 색인이 필요하지 않으므로 질문에 의해 정의 된 키를 사용하여 대답을 찾으십시오. 위의 질문에 가장 많은 X가있는 요일의 경우 월요일, 화요일 등 X 작업의 수를 검색합니다. 월요일, 화요일, 화요일 등과 같이 X로 저장했을 수 있습니다.
결론 : MongoDB와 Redis는 저에게 큰 도움이됩니다. MongoDB가 사용 사례에 매우 적합하다고 생각하지는 않습니다. 대신 기존 SQL 데이터베이스의 이점을 실제로 누릴 수 있다고 생각합니다. 그러나 데이터가 정말 단순하면 Redis를 항상 사용할 수 있습니다. 가장 중요한 것은 데이터를 하나의 데이터베이스에 보관하고 영원히 유지해야한다는 실수를 범하지 않는 것입니다. 집계와 오래된 데이터 버리기가 중요합니다.
그럼 선택 기준은 무엇입니까? db가 얼마나 빠릅니까? 특정 기능을 찾으십니까? 이 질문은 매우 모호합니다. –
그것은 모두 신뢰성, 확장 성 및 속도에 관한 것입니다. 솔루션이 쉽게 확장되는 것은 매우 중요합니다. (MongoDB autosharding?) 더 많은 노드를 던지면 속도 또한 매우 중요합니다. – Juanda
관련 상품 http://stackoverflow.com/questions/2892729/mongodb-vs-cassandra/2894665#2894665 –