복붙노트

[REDIS] 빠른 쓰기위한 MongoDB를 대 레디 스 대 카산드라, 일시적 행 스토리지 솔루션

REDIS

빠른 쓰기위한 MongoDB를 대 레디 스 대 카산드라, 일시적 행 스토리지 솔루션

나는 시스템을 구축하고있어 그 트랙과를 검증 광고 노출 수와 클릭 수. 이 방법은 삽입 명령이 많이 있다는 것을 일부 읽기 작업하지만, 초점 (90 / 초 평균 250에서 정점에 대해) 성능과 제작은 타오르는 빠른.

이 시스템은 MongoDB를에 현재,하지만 난 그 이후 카산드라와 레디 스에 소개했습니다. 그것은 좋은 아이디어가 아니라 MongoDB를에 체류보다,이 두 가지 솔루션 중 하나에 갈 수 있을까요? 그 이유는 무엇?

감사합니다

해결법

  1. ==============================

    1.이 같은 수확 솔루션, 나는 다단계 접근 방식을 추천 할 것입니다. 레디 스 실시간 통신에 좋다. O (1) 목록 작업 : 레디 스는 메모리 키 / 값 저장소와 상속 메모리 데이터베이스되는 아주 좋은 장점으로 설계되었습니다. 오랫동안 서버에서 사용하는 RAM이있는만큼, 레디 스 당신은 극단적 인 속도로 항목을 삽입해야 할 때 좋은 당신의 목록의 끝으로 밀어 진정되지 리라. 불행하게도, 레디 스 당신이 RAM의 양보다 더 큰 데이터 세트와 함께 작동 할 수 없습니다 및 스케일링 (단지 디스크에 쓰기, 읽기가 서버 또는 시스템 충돌의 경우를 다시 시작하기위한 것은) 당신과 당신의 응용 프로그램에 의해 수행되어야한다 . (일반적인 방법은 레일에 특히 일부 레디 스 드라이버에서 루비들을 구현되는 다수의 서버에 걸쳐 확산 키입니다.) 레디 스도 게시 / 시간에 유용 할 수있는 messenging를 서브 스크라이브뿐만 아니라 간단한 지원합니다.

    이 같은 수확 솔루션, 나는 다단계 접근 방식을 추천 할 것입니다. 레디 스 실시간 통신에 좋다. O (1) 목록 작업 : 레디 스는 메모리 키 / 값 저장소와 상속 메모리 데이터베이스되는 아주 좋은 장점으로 설계되었습니다. 오랫동안 서버에서 사용하는 RAM이있는만큼, 레디 스 당신은 극단적 인 속도로 항목을 삽입해야 할 때 좋은 당신의 목록의 끝으로 밀어 진정되지 리라. 불행하게도, 레디 스 당신이 RAM의 양보다 더 큰 데이터 세트와 함께 작동 할 수 없습니다 및 스케일링 (단지 디스크에 쓰기, 읽기가 서버 또는 시스템 충돌의 경우를 다시 시작하기위한 것은) 당신과 당신의 응용 프로그램에 의해 수행되어야한다 . (일반적인 방법은 레일에 특히 일부 레디 스 드라이버에서 루비들을 구현되는 다수의 서버에 걸쳐 확산 키입니다.) 레디 스도 게시 / 시간에 유용 할 수있는 messenging를 서브 스크라이브뿐만 아니라 간단한 지원합니다.

    이 시나리오에서는 레디 스 "는 단 하나"입니다. 이벤트의 각 특정 유형의 당신은 고유 한 이름으로 레디 스의 목록을 만들; 예를 들어 우리는 "페이지가 보여"하고 "링크를 클릭했습니다." 단순화를 위해 우리는 각 목록의 데이터가 동일한 구조입니다 있는지 확인하려면; 링크는 본 페이지는 토큰 URL 사용자가있을 수 있지만, 사용자 토큰, 링크 이름과 URL을 가질 수 있습니다 클릭. 첫 번째 관심사는 당신이 밀어 필요가 일어난 사실과 어떤 절대적으로 neccesary 데이터를 받고있다.

    우리는 목록의 마지막을 지나고 항목을 가지고 그것을 넘겨를 요청하여, 레디 스 '손 떨어져이 미친 듯이 삽입 된 정보를 가지고 몇 가지 간단한 처리 노동자가 다음으로. 작업자가 제대로 데이터를 제출하고 좀 더 영구적 인 저장 사이트로 넘겨에 필요한 조정 / 중복 제거 / ID 조회를 할 수 있습니다. 당신은 레디 스 '메모리 부하 견딜 수를 유지하기 위해 필요로하는 이들 노동자의 많은으로 불. 는 등 원하는 저장 (SQL, 몽고위한 레디 스 드라이버 (대부분의 웹 언어는 지금) 하나를 가지고 같이 오래 당신이 원하는 무엇이든에있는 근로자 (Node.js를, C #, 자바, ...) 쓸 수 )

    MongoDB의 문서 저장에 좋다. 레디 스 달리 RAM보다 큰 데이터베이스를 처리 할 수 ​​있으며 자신의에이 샤딩 / 복제를 지원합니다. SQL 기반 옵션을 통해 MongoDB를의 장점은 넌 저장되는 방식으로 데이터를 자유롭게 변경할 수 그러나 당신이 언제든지 원하는, 당신은 소정 스키마를 가질 필요가 없다는 것입니다.

    I 그러나, 처리 데이터를 유지하는 "하나의 단계"단계에 레디 스 또는 몽고 제안하고 저장 후 처리 데이터에 전통적인 SQL 설정 (또는 포스트 그레스 MSSQL 아마도)를 사용한다. 당신이 가고 싶어 수 있기 때문에, 나에게 관계형 데이터와 같은 클라이언트 동작의 소리를 추적 또는 "나에게이 페이지를 볼 모두보기"또는 "이 특정 일에이 사람이보기를 한 얼마나 많은 페이지" "무슨 일 총에서 가장 시청자가 있었다? ". 더욱 조인 또는 분석 목적에 대한 쿼리는 당신이 와서, 당신이 필터링을 많이 할 수있는 SQL 솔루션을 성숙 복잡한있을 수 있습니다; NoSQL이 할 수없는 (또는 구체적 몽고 레디 스)의 결합 또는 데이터 세트에 걸쳐 변화 복잡한 쿼리.

  2. ==============================

    2.나는 현재 매우 큰 광고 네트워크를위한 일을하고 우리는 플랫 파일에 기록 :)

    나는 현재 매우 큰 광고 네트워크를위한 일을하고 우리는 플랫 파일에 기록 :)

    나는 개인적으로 몽고의 팬이에요,하지만 솔직히, 레디 스 및 카산드라는 좋든 나쁘 중 하나를 수행 할 가능성이 있습니다. 내 말은, 당신은 메모리에 물건을 던지는 후 백그라운드에서 디스크에 플러시됩니다하고있는 모든 (몽고와 레디 스 모두이 작업을 수행).

    당신이 빠른 속도 타오르는을 찾고 있다면, 다른 옵션은 로컬 메모리에 여러 가지의 노출을 유지 한 다음 디스크마다 분 정도 세척하는 것입니다. 물론,이 몽고와 레디 스 당신을 위해 무엇을 기본적으로. 움직이지 진짜 매력적인 이유.

  3. ==============================

    3.세 가지 솔루션 (사 당신이 플랫 파일을 계산하는 경우)는 빠른 쓰기 타오르는 줄 것이다. 비 관계형 (NoSQL에) 솔루션은 당신에게 잘 재해 복구의 목적으로 조정할 수있는 결함 허용을 제공 할 것입니다.

    세 가지 솔루션 (사 당신이 플랫 파일을 계산하는 경우)는 빠른 쓰기 타오르는 줄 것이다. 비 관계형 (NoSQL에) 솔루션은 당신에게 잘 재해 복구의 목적으로 조정할 수있는 결함 허용을 제공 할 것입니다.

    규모의 측면에서, 세 개의 MongoDB를 노드와 테스트 환경은 초당 혼합 거래를 2-3k 처리 할 수 ​​있습니다. 8 개 노드에서, 우리는 초당 12K-15K 혼합 트랜잭션을 처리 할 수 ​​있습니다. 카산드라는 더 높은 확장 할 수 있습니다. 250 문제이다를 판독 없다 (이상이어야한다).

    더 중요한 질문은이 데이터로 무엇을 원하는가, 무엇입니까? 운영보고? 시계열 분석? 애드혹 패턴 분석? 실시간보고?

    당신이 모음 내에서 여러 속성을 기반으로 임시 분석을 수행 할 수있는 기능을 원하는 경우 MongoDB를 좋은 옵션입니다. 당신은 인덱스에 메모리에 저장됩니다 불구하고, 모음에 40 개 인덱스까지 넣어 너무 크기에 볼 수 있습니다. 그러나 결과는 유연한 분석 솔루션입니다.

    카산드라는 키 - 값 저장소입니다. 당신은 당신의 차 인덱스 오른쪽 앞까지 역할을 열 정적 열 또는 세트를 정의합니다. 카산드라에 대해 실행되는 모든 쿼리는이 인덱스를 조정해야합니다. 당신은 거기에 보조를 넣을 수 있지만 약까지 잘 지내입니다. 당신은 물론, 키가 아닌 속성에 대한 저장소를 스캔 맵리 듀스를 사용할 수 있지만 그냥 것 : 직렬 스캔을 스토어를 통해. 카산드라는 또한 서버 노드에서 "같은"의 개념 또는 정규식 작업이 없습니다. 당신이 "알렉스"로 이름이 시작, 당신은 전체 컬렉션을 검색해야합니다 모든 고객을 찾으려면 각 항목의 이름을 꺼내와 클라이언트 측 정규식을 통해 그것을 실행합니다.

    나는 레디 스 그것에 대해 지능적으로 말을 충분히 익숙하지 않다. 죄송합니다.

    당신은 비 관계형 플랫폼을 평가하는 경우에는 CouchDB를하고 Riak을 고려할 수 있습니다.

    도움이 되었기를 바랍니다.

  4. ==============================

    4.그냥 이걸 발견 : http://blog.axant.it/archives/236

    그냥 이걸 발견 : http://blog.axant.it/archives/236

    가장 흥미로운 부분을 인용 :

    나는 모든 데이터 유형과 볼륨에 적어도 달려 같아요. 최고의 조언은 아마 당신의 전형적인 데이터 세트에 벤치 마크하고 자신을 볼 것입니다.

  5. ==============================

    5.벤치마킹 탑되는 NoSQL 데이터베이스에 따르면 (여기에서 다운로드) 나는 카산드라를 추천합니다.

    벤치마킹 탑되는 NoSQL 데이터베이스에 따르면 (여기에서 다운로드) 나는 카산드라를 추천합니다.

  6. ==============================

    6.당신이 (평면에 앞장 설에서 멀리 이동하고 필요로) 선택의 여지가 있다면 나는 레디 스로 갈 것입니다. 그것은 엄청나게 빠르고 편안하게 부하를 처리 할 당신에 대해 얘기하지만, 더 중요한 것은 당신은 세척 / IO 코드를 관리 할 필요가 없습니다. 나는 그것의 꽤 정직하고 있지만, 관리 할 적은 코드는보다 나은 이해합니다.

    당신이 (평면에 앞장 설에서 멀리 이동하고 필요로) 선택의 여지가 있다면 나는 레디 스로 갈 것입니다. 그것은 엄청나게 빠르고 편안하게 부하를 처리 할 당신에 대해 얘기하지만, 더 중요한 것은 당신은 세척 / IO 코드를 관리 할 필요가 없습니다. 나는 그것의 꽤 정직하고 있지만, 관리 할 적은 코드는보다 나은 이해합니다.

    당신은 또한 당신이 파일 기반 캐싱을 얻지 못할 수도 있으니 레디 스 수평 확장 옵션을 얻을 것이다.

  7. ==============================

    7.데이터베이스에 삽입의 문제는 그들은 일반적으로 각 삽입에 대한 디스크에 임의의 블록 쓰기를 필요로한다는 것이다. 당신이 원하는 것은 단지 이상적으로 순차적 블록, 디스크에 너무 매 10 개 삽입 또는를 기록 무언가이다.

    데이터베이스에 삽입의 문제는 그들은 일반적으로 각 삽입에 대한 디스크에 임의의 블록 쓰기를 필요로한다는 것이다. 당신이 원하는 것은 단지 이상적으로 순차적 블록, 디스크에 너무 매 10 개 삽입 또는를 기록 무언가이다.

    플랫 파일은 좋다. 요약 통계 (페이지 당 예를 들어 총 조회수가) 병합 - sorty지도 - reducy 형 알고리즘을 사용하여 확장 가능한 방식으로 플랫 파일에서 얻을 수 있습니다. 그것은 당신의 자신의 롤 너무 어렵지 않다.

    SQLite는 이제도 적절한 성능을 제공 할 수있다 쓰기 앞서 로깅을 지원합니다.

  8. ==============================

    8.나는 간단한 $ (350) 델에 MongoDB를 함께 30K 삽입 / 초 주위를 얻을 수 있습니다. 당신은 단지 2K 삽입 / 초 주위에 필요하면, 내가 MongoDB를 고수하고 확장 성을 샤딩 것입니다. 어쩌면 또한 Node.js를하거나 일을 더 비동기 만들 비슷한 뭔가를하고 조사.

    나는 간단한 $ (350) 델에 MongoDB를 함께 30K 삽입 / 초 주위를 얻을 수 있습니다. 당신은 단지 2K 삽입 / 초 주위에 필요하면, 내가 MongoDB를 고수하고 확장 성을 샤딩 것입니다. 어쩌면 또한 Node.js를하거나 일을 더 비동기 만들 비슷한 뭔가를하고 조사.

  9. ==============================

    9.나는 손에 MongoDB를, CouchDB를하고 카산드라와 경험이 있습니다. 나는 base64로 문자열과 NoSQL의에이 문자열 삽입 많은 파일을 변환. MongoDB를 가장 빠른 것입니다. 카산드라는 가장 느린이다. CouchDB를 너무 느립니다.

    나는 손에 MongoDB를, CouchDB를하고 카산드라와 경험이 있습니다. 나는 base64로 문자열과 NoSQL의에이 문자열 삽입 많은 파일을 변환. MongoDB를 가장 빠른 것입니다. 카산드라는 가장 느린이다. CouchDB를 너무 느립니다.

    나는 MySQL은 훨씬 더 빨리 그들 모두보다 것이라고 생각하지만, 난 아직 내 테스트 케이스에 대한 mysql을 시도하지 않았다.

  10. from https://stackoverflow.com/questions/3010224/mongodb-vs-redis-vs-cassandra-for-a-fast-write-temporary-row-storage-solution by cc-by-sa and MIT license