[REDIS] 나는 무엇을 선택해야합니다 : MongoDB를 / 카산드라 / 레디 스 / CouchDB를? [닫은]
REDIS나는 무엇을 선택해야합니다 : MongoDB를 / 카산드라 / 레디 스 / CouchDB를? [닫은]
우리는 정말 큰 프로젝트를 개발하고 누군가가 나에게 DB 백엔드는 우리가 선택해야하는지에 대한 몇 가지 조언을 줄 수 있는지 궁금 해서요.
우리의 시스템은 다음 중앙 서버에 신호 및 상기 서버는 상기 신호 정보 (신호가 35 바이트 길이에 관한)를 전송 1,100 전자 장치에 의해 화합물이다. 어떻게 지금까지이 장치는 우리가 드 번호를한다면 그래서, 그 4.752.000 새 레코드 / 데이터베이스에 일, 142.560.000 새 레코드 / 월 총있을거야, 분 각 당 3 개 신호에 대해 전송됩니다.
우리는 빠르고 안정적인 조명하는 DB 백엔드가 필요합니다. 물론 우리는 그 DB에 대한 몇 가지 복잡한 데이터 마이닝을 할 필요가있다. 그러나 우리는 문서의 웹 사이트가 초기 단계에 아직도의 MongoDB를 / 카산드라 / 레디 스 / CouchDB를에 대한 몇 가지 연구를하고 있습니다.
어떤 도움? 아이디어?
고마워요!
해결법
-
==============================
1.공간 규모 (1000 개 장치) 계산 및 / 또는 저장 규모로 당신을 오해하지 마십시오. 초당 수십 35 바이트의 삽입도 저가형 하드웨어에서 실행되는 모든 주류 DBMS에 대한 사소한 작업입니다. 마찬가지로, 한 달에 1 억 4,200 만 기록은 인덱스를 포함한 압축없이 목적으로 만 한달에 저장 한 10 ~ 기가 바이트 정도이다.
공간 규모 (1000 개 장치) 계산 및 / 또는 저장 규모로 당신을 오해하지 마십시오. 초당 수십 35 바이트의 삽입도 저가형 하드웨어에서 실행되는 모든 주류 DBMS에 대한 사소한 작업입니다. 마찬가지로, 한 달에 1 억 4,200 만 기록은 인덱스를 포함한 압축없이 목적으로 만 한달에 저장 한 10 ~ 기가 바이트 정도이다.
귀하의 질문에 코멘트, 당신은 말했다 :
신뢰할 수 있음? (-이 답변의 하단에있는 CAP 정리의 내 설명을 참조하십시오 당신이 손상에 데이터를하지 않을 것, 그리고 충돌 않을거야 의미 가정) 모든 주류 DBMS이 보장 할 수 있습니다. 속도? 심지어 하나의 기계로, 10 ~ 100 배이 작업은 문제가되지 않습니다. 확장 성? 심지어는 완전히 색인 현재 속도, 전체 년의 데이터 압축,에서, 쉽게 디스크 공간의 100기가바이트에 맞 것이다 (마찬가지로, 우리는 이미 삽입 속도가 문제가되지 설립했습니다).
따라서, 나는 NoSQL이 같은 이국적인 솔루션, 또는 분산 데이터베이스에 대한 명확한 필요성을하지 않습니다 - MySQL과 같은 일반, 기존 관계형 데이터베이스가 잘 될 것입니다. 장애 조치, 단지 설치에 대한 마스터 - 슬레이브 구성에서 백업 서버를 걱정하는 경우. 우리는 시간 100S 또는 1000 말하는 경우 현재 배율은 단지 수평 데이터 수집 장치 (즉, {파티션 인덱스} = {기기 ID} 모듈 {파티션의 수})의 ID에 기초하여 몇 개의 인스턴스를 분할.
마음에 곰의 표상 모델과 풍부한 툴셋을 모두 포기 관계형 데이터베이스의 세계 수단의 안전하고 편안한 경계를 떠나 그. 이것은 당신의 "복잡한 데이터 마이닝은"훨씬 더 어렵게 만들 것이다 - 당신은 데이터베이스에 데이터를 입력 할 필요가 없습니다, 당신은 또한 그것을 밖으로 얻을 필요가있다.
그 존재의 모든 MongoDB를하고 CouchDB를이와 드물게 배포하는 간단한 작업입니다 말했다. 그들은 또한 매우 재미있어, 사람들의 수는 더 매력적인 것 (다만 프로그래머! - 임원도).
일반적인 지혜는 당신이 제시 한 세되는 NoSQL 솔루션으로, 카산드라 (- 이것은 페이스 북에서 사용할 수 있도록 설계되었습니다 물론, 상대적으로 말하기, 난 당신이 높은 삽입 볼륨을 생각하지 않는) 높은 삽입 볼륨에 대한 최고입니다, 그입니다 ; 이 작업하기 더 어렵다는 의해 대응한다. 당신은 당신이 언급하지 않았다 이상한 요구 사항이없는 한 그래서, 사용 사례에 대해 반대 추천 할 것입니다.
당신이 긍정적 NoSQL의 배포에 설정하는 경우, 당신은 CAP 정리를 고려할 수 있습니다. 이것은 당신이 MongoDB를하고 CouchDB를 사이에 결정하는 데 도움이됩니다. 여기에 좋은 링크는 다음과 같습니다 http://blog.nahurst.com/visual-guide-to-nosql-systems. 그것은 모두 당신이 "신뢰성"에 의해 무엇을 의미하는지에 온다 : CouchDB를 가용성에 대한 일관성을 거래하는 반면 MongoDB를은 일관성의 유용성을 거래. (카산드라는 쿼리 당 / 작성 쓰기 위해 읽어야 얼마나 많은 서버를 지정하여,이 균형을 기교 수 / 성공을 읽고, UPDATE를 : 자, 그렇게 할 수 CouchDB를, BigCouch와 매우 흥미로운 ...!)
프로젝트의 행운을 빕니다.
-
==============================
2.대답의 대부분은 당신이 그것을 수집 됐어요 후 수행 할 작업에 따라 달라집니다. 많은 양의 데이터를 저장하는 것은 간단합니다 : 그냥 dumt 로그 파일, 데이터베이스에 대한 필요로. 당신이 그것에 복잡한 분석 및 데이터 마이닝을 수행 할 경우 반면에, 다음 데이터베이스 도움이됩니다.
대답의 대부분은 당신이 그것을 수집 됐어요 후 수행 할 작업에 따라 달라집니다. 많은 양의 데이터를 저장하는 것은 간단합니다 : 그냥 dumt 로그 파일, 데이터베이스에 대한 필요로. 당신이 그것에 복잡한 분석 및 데이터 마이닝을 수행 할 경우 반면에, 다음 데이터베이스 도움이됩니다.
다음 질문은 당신이 할거야 분석의 종류입니다. 이 특정 특성, 마지막 시간 / 일 / 주 / 월을 가지고있는 데이터의 하위 집합에 대해 수행 할 것인가, 데이터를 집계하거나 어떻게 든 미리 계산? 즉 : 당신이 수집 된 형태로 전체 데이터 세트에 대한 액세스를 필요로 하는가? 이 재미있을 너무 낡았 때 데이터를 보관할 수 있습니까? 당신은 데이터를 집계하고, 집계에 분석을 수행 할 수 있습니까?
광고 분석 작업 (광고 노출에 대한 데이터 포인트의 수십억 수집)에서 내 경험에 통합이 핵심입니다. 당신은 그것을 살균 한 다음 업데이트 및 쿼리를하자 MongoDB를, 카산드라 또는 MySQL은 같은 데이터베이스에 넣어, 원시 데이터를 수집합니다. 그런 다음 주기적으로 데이터를 집계하고 데이터베이스에서 제거 (그러나 원시 데이터를 보관하면 나중에 필요할 수 있음).
집계는 기본적으로 사용자가 데이터에 대해 묻고 싶은 모든 질문을하고, 쉽게 특정 질문에 대한 답을 검색 할 수있는 형식으로 저장합니다. 당신이 가장 X.이의 순진 구현은 거대한 테이블에 기록 된 모든 신호를 유지하는 것 한 요일에 알고 싶어하고 쿼리를 수행하는 것이 말 그 금액 수집의 수 X를 가지고 모든 행 신호는이 쿼리가 더 길고 더 오래 걸립니다 성장한다. 인덱싱, 샤딩 또는 최적화 아무리이 도움이되지 않습니다. 대신 매일 /시 / 분 (정확한 사용 사례에 따라 어떻게 최신 당신의보고 요구 될하는) 당신이 녹음 한 새로운 신호를 보면, 모든 X에 대해 당신은 얼마나 많은을 추적하는 카운터를 증가 그렇게에 화요일과 경우는, 화요일 월요일 인 경우 X는 월요일에 있었다. 그런 식으로 당신은 나중에 각 요일의 수를 검색하고 비교할 수 있습니다. 당신은 당신이 대답 할 수 있기를 원하는 모든 질문에 대해이 작업을 수행 한 다음 데이터베이스에서 신호를 제거 (그러나 다시, 원시 데이터를 보관).
데이터베이스 유형 당신은 당신이 들어오는 신호를 저장하는 것과 동일 할 수의 집계를 기록하지만 그것은 매우 멋진 일 필요는 없습니다. 그것은 일반적으로 단지 숫자 특정 응답을 나타내는 키와 값을 저장합니다.
오래된 학교 데이터웨어 하우징에서 (온라인 트랜잭션 처리) 당신은 OLTP이라고에서 들어오는 신호를 저장하는 데이터베이스를 구사하고 데이터베이스는 당신이 집계 OLAP이라고에서 (온라인 분석 처리)을 저장합니다. OLTP 삽입을 위해 최적화되고, OLAP는 질의에 대해 최적화된다. 조건은 나이가 사람들이 그들을들을 때 그들은 즉시 SQL 및 starschemas과 모든 것을 생각하는 경향이있다. 아마도 내가 그들을 사용하지 말아야합니다,하지만 그들은 편리한 용어입니다.
어쨌든, OLTP 당신은 삽입 데이터를 신속하게 뭔가뿐만 아니라 지원하는 데이터를 인덱싱하고 물건을 찾고 있다는 것을 원한다. 집계 크게 합산 및 최대 값과 최소값을 찾는 절반 작업을 수행하는 데이터베이스에 의해 도움이됩니다. 정말 MongoDB를 같이 그렇게 쉽게 설정하고 작동하도록 때문입니다. 와 데이터 I의 작업은 지저분하고 몽고의 용서를 schemalessness가 이익 그래서 모든 항목이 동일한 속성 세트를 가지고하는 경향이있다. 반면에, 데이터 사운드는 훨씬 더 균일 한, 몽고, 그래서 아마 많은 혜택으로 당신을 포기하지 않을 것입니다. 아직하지만 좋은 오래된 관계형 데이터베이스를 간과하지 마십시오. 당신이 그렇게에 합산와 많이 할 거라면 다음 SQL은은을 위해 만들어진 무엇이 있다는, 아주 좋습니다.
OLAP 뭔가 훨씬 더 간단 작품의 경우, 키 - 값 저장소 당신이 필요합니다. 로하고 설정하는 너무 작업에 매우 쉽기 때문에 나는 레디 스를 사용합니다. 그것은 또한 당신이 편리 스칼라 값보다 더 저장할 수 있습니다. 때때로 값은 같은 값을 인코딩해야 할 가장 키 - 값 상점에서 목록 또는 해시 사실이지만, 레디 스 기본적를 처리합니다. 레디 스의 단점은 당신이 쿼리를 할 수 없다는 것입니다 ( "같이하는 것은 나에게 Y이 값을 가진 모든 행을 준다"), 당신은 당신의 데이터에 직접 인덱스를 유지해야합니다. 반면에 당신은 매우 모든 질문에 대한 답변은 미리 계산 된 이후, 당신이해야 할 모든 질문에 의해 정의 된 키를 사용하여 답을 찾아 볼 것입니다 인덱스를 필요가 없습니다. 요일은 당신이 등 X 작업 월요일, 화요일,의 번호를 찾아 가장 X를 가지고 위의 질문에 대한 아마 당신은 X로 저장 한 : 월요일, X : 화요일, 등
결론 : MongoDB를하고 레디 스 나를 위해 좋은 작동합니다. 내가 MongoDB를이 사용 사례에 대한 아주 좋은 생각하지 않습니다, 대신 나는 당신이 실제로 전통적인 SQL 데이터베이스에서 더 많은 혜택을 누릴 수있는 생각 (하지만 데이터는 아마도 레디 스 모든 방법을 사용할 수있는 정말 간단 경우가 따라 다름). 가장 중요한 것은 당신이 하나의 데이터베이스에있는 데이터가 영원히 유지해야한다고 생각하는 실수를하지 않는 것입니다. 집계 멀리 이전 데이터를 던지는 핵심입니다.
-
==============================
3.CouchDB를 매우 신뢰성이 우수한 내구성을 제공합니다, 당신은 매우 낮은 CPU 부하를 경험하게 될 것입니다. 그것은 수요에 또는 연속적으로하거나, 여러 노드 사이의 복제에도 우수합니다.
CouchDB를 매우 신뢰성이 우수한 내구성을 제공합니다, 당신은 매우 낮은 CPU 부하를 경험하게 될 것입니다. 그것은 수요에 또는 연속적으로하거나, 여러 노드 사이의 복제에도 우수합니다.
해당 복제 능력과 당신이 성숙 도구를 사용하여 수평 아주 쉽게 확장 할 수있는 편안하고 API (그것의 API에 대한 HTTP 사용) 감사합니다. (Nginx에 또는 역 프록시를위한 아파치, HTTP로드 밸런서 등)
당신은 /지도 쓰기 미리 계산 쿼리에 자바 스크립트에서 함수를 줄일 수 있습니다. 결과는 점진적으로 그들은 단지 신호 당 한 번만 계산하는 neeed 수단 디스크에 구축된다. 그것은 단지 당신이 쿼리를 실행 한 마지막 시간 이후 기록 된 신호 데이터에 대한 계산을하기 때문에 즉, 쿼리는 정말 빨리 할 수 있습니다.
디스크 공간을 많이 사용할 것으로 예상 할 수 있습니다 CouchDB를은 성능을 위해 디스크 공간을 거래. 당신이 적절하게 구현하는 경우 귀하의 질의 번개 빠르고 절약 디스크 공간이 될 수 있습니다.
CouchDB를 한 번 사용해 보시기 바랍니다.
왜 강 입자 충돌기 과학자들은 고장 허용으로 BBC에 CouchDB를하고 CouchDB를 사용하는, 확장 성, 다중 데이터 센터 키 - 값 저장소를 확인하세요
-
==============================
4.~ 3000 개 신호 / 분 = 50 개 쓰기 / 이러한 시스템의 쉽게 처리 할 수있을 것들.
~ 3000 개 신호 / 분 = 50 개 쓰기 / 이러한 시스템의 쉽게 처리 할 수있을 것들.
데이터 세트는하지만, 메모리보다 더 큰 성장함에 따라 카산드라는 아마 가장 잘 작동하며, 하둡 통합 데이터 마이닝에 도움이 될 것입니다.
-
==============================
5.그래서 당신은 데이터 마이닝에 대한 중앙 DB에 데이터를 저장하는? 어떤 온라인 트랜잭션 처리하지?
그래서 당신은 데이터 마이닝에 대한 중앙 DB에 데이터를 저장하는? 어떤 온라인 트랜잭션 처리하지?
나는 그것이 내구성에 관해서 MongoDB를 좋은 일을한다는 것을 생각하지 않습니다. http://nosql.mypopescu.com/post/392868405/mongodb-durability-a-tradeoff-to-be-aware-of를 참조하십시오.
http://www.infobright.org/ : 어쩌면 당신은 Infobright DB를 분석을 사용할 수 있습니다, 그것은 커뮤니티 에디션을 가지고?
-
==============================
6.당신은 쓰기가 (데이터가 디스크에 지속) "빠른 번개"허용 할 수있는 데이터 저장소를 찾고, 데이터 마이닝 (이 읽기 사이클) 나중 단계에서 발생합니다. 또한,이 상태의 숫자를 고려, 그것은 하루에 정보 1백59메가바이트을 모두 수집하면 밝혀, 또는 한달에 약 5기가바이트
당신은 쓰기가 (데이터가 디스크에 지속) "빠른 번개"허용 할 수있는 데이터 저장소를 찾고, 데이터 마이닝 (이 읽기 사이클) 나중 단계에서 발생합니다. 또한,이 상태의 숫자를 고려, 그것은 하루에 정보 1백59메가바이트을 모두 수집하면 밝혀, 또는 한달에 약 5기가바이트
이 경우, 왜 레디 스 보지.
당신은 매일 레디 스 데이터 파일을 보관하고, (당신이로드 5기가바이트의 우려 사항이나 RAM 공간의 큰 금액이있는 경우에, 당신이 보관이 해결 될 수있다) 나중에 참조 항상 수
레디 스 해당 사이트에 게시 된 숫자에 따라, 오히려 빠르다. 도움이 되었기를 바랍니다. 키란
-
==============================
7.나는 주문 술사에서 MongoDB를 사용했고 그것을 좋아했다. 나는 그런 대규모 데이터 세트와 속도를 말할 수는 없지만, (주문 술사를 기반으로) Clojure의 트랜잭션 관리의 측면에서 매우 안정적입니다. 주문 술사 또한 모든 데이터를 분석하는, 그래서 만약있는 거 계획을 몇 가지 좋은 분석 도구를 제공하여 MongoDB + 주문 술사는 강력한 조합이 될 수 있습니다.
나는 주문 술사에서 MongoDB를 사용했고 그것을 좋아했다. 나는 그런 대규모 데이터 세트와 속도를 말할 수는 없지만, (주문 술사를 기반으로) Clojure의 트랜잭션 관리의 측면에서 매우 안정적입니다. 주문 술사 또한 모든 데이터를 분석하는, 그래서 만약있는 거 계획을 몇 가지 좋은 분석 도구를 제공하여 MongoDB + 주문 술사는 강력한 조합이 될 수 있습니다.
-
==============================
8.당신은 수평으로 확장 할 수 있도록 설계 -에서 - 더 - 스타트 기능, 가용성 및 대한 조정의 일관성에 대한 카산드라의 모양을 좋아하는 경우에, 당신은 또한 유사한 기능 세트하지만 다른 접근 방식을 가지고 Riak,보고 할 수 있습니다 .
당신은 수평으로 확장 할 수 있도록 설계 -에서 - 더 - 스타트 기능, 가용성 및 대한 조정의 일관성에 대한 카산드라의 모양을 좋아하는 경우에, 당신은 또한 유사한 기능 세트하지만 다른 접근 방식을 가지고 Riak,보고 할 수 있습니다 .
from https://stackoverflow.com/questions/3478916/what-should-i-choose-mongodb-cassandra-redis-couchdb by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] Node.js를 데이터베이스 [폐쇄] (0) | 2020.01.01 |
---|---|
[REDIS] beanstalkd 대 resque 대 delayed_jobs? (0) | 2020.01.01 |
[REDIS] 어떻게 한 서버에서 다른 서버로 레디 스 데이터베이스를 이동하는 방법은 무엇입니까? (0) | 2020.01.01 |
[REDIS] 왜 우리는 PostgreSQL을 같은 데이터베이스를 통해 RabbitMQ 같은 메시지 브로커가 필요합니까? (0) | 2020.01.01 |
[REDIS] PHP와 레디 스에 갈 연결 (0) | 2020.01.01 |