nosql 설계 - Redis, CouchDB 또는 Cassandra?




스키마 차이 (3)

다양한 NoSQL 데이터베이스의 강점과 약점은 무엇입니까?

특히 여러 서버에 쓰기 부하를 분산 할 때 Redis가 약한 것처럼 보입니다. 그럴까요? 큰 문제입니까? 서비스가 커지면 큰 문제가 될 수 있습니까?


Answers

NoSQL 데이터베이스 (및 SQL 데이터베이스)의 강점과 약점은 사용 사례에 따라 크게 다릅니다. 대규모 프로젝트의 경우 성능이 중요합니다. 그러나 시간과 돈이 제한된 새로운 프로젝트 나 프로젝트의 경우 단순성과 출시 기간이 가장 중요 할 수 있습니다. 자신을 가르치기 (자신의 관점을 넓히고 더 나은 가치있는 프로그래머가 됨), 아마도 가장 중요한 것은 간단하고 견고한 기본 개념입니다.

어떤 종류의 프로젝트에 염두에 있습니까?

내 머리 꼭대기에서 몇 가지 강점과 약점 :

  • 레디 스
    • 매우 간단한 키 - 값 "전역 변수 서버"
    • 매우 간단합니다 (일부는 "존재하지 않는다"라고 말합니다). 쿼리 시스템
    • 이 목록에서 쉽게 가장 빠른
    • 업무
    • 데이터 세트는 메모리에 맞아야합니다.
    • 미숙 한 클러스터링, 불확실한 미래 (분명히 좋겠지 만 아직 결정되지 않았습니다.)
  • 카산드라
    • BigTable과 유사한 데이터베이스의 가장 중요한 커뮤니티 계기
    • 아마도 커다란 / 성장하는 클러스터에서이 목록을 관리하는 것이 가장 쉬운 방법 일 것입니다.
    • 지도 / 축소 지원, 분석, 데이터웨어 하우징에 적합
    • MUlti- 데이터 센터 복제
    • 튜너 블 일관성 / 가용성
    • 단일 장애 지점 없음
    • 프로젝트 초기에 어떤 쿼리를 사용하여 데이터 모양과 인덱스를 준비해야하는지 알고 있어야합니다
  • CouchDB
    • 마스터 / 슬레이브, 마스터 / 마스터 및 이국적인 아키텍처를 지원하는 최상의 동기화 (복제) 지원을 손쉽게 내릴 수 있습니다.
    • HTTP 프로토콜, 브라우저 / 앱은 DB와 부분적으로 또는 전체적으로 직접 상호 작용할 수 있습니다. (동기화는 HTTP를 통해 수행됩니다)
    • 간단한 학습 곡선 후에 Javascript와 map / reduce를 사용하는 매우 정교한 쿼리 시스템
    • 클러스터 작업 (SPOF, 튜너 블 일관성 / 가용성 없음)은 현재 중요한 포크 (BigCouch)입니다. 아마도 소파에 통합 될 것이지만 로드맵은 없습니다.
    • 마찬가지로, 클러스터링과 다중 데이터 센터는 이론적으로는 가능하지만 (내가 언급 한 "이국적인"것) 그러나 이번에는 모든 툴링을 직접 작성해야합니다.
    • 파일 형식 만 추가하면 (데이터베이스와 인덱스 모두) 디스크를 놀랍게 빨리 소비하므로 데이터베이스의 모든 레코드를 전체 복사본으로 만드는 압축 (진공 제거)을 수동으로 실행해야합니다. 각 색인 파일에 대해 동일한 작업이 필요합니다. 다시 말하지만, 당신은 당신 자신의 도구 제작자가되어야합니다.


질문 1과 관련하여 Redis는 일부 지속성 기능이있는 메모리 내장 저장소입니다. 모든 데이터 세트는 메모리에 저장해야합니다. 따라서 단일 인스턴스는 서버의 최대 메모리로 제한됩니다. 이제 여러 서버에서 실행되는 여러 Redis 인스턴스에 데이터를 분할 할 수 있습니다. 예산이 충분하다면 100GB ~ ​​1TB의 데이터를 Redis 박스 세트에 저장할 수 있습니다. 샤딩은 자동으로 수행되지 않으므로 클라이언트 또는 응용 프로그램에서 구현해야합니다. 또한 데이터에서 수행 할 수있는 작업에 몇 가지 제약 사항이 있습니다 (예 : 서버 측에서 다른 Redis 인스턴스가 호스팅하는 두 세트의 교차를 계산할 수 없음).

질문 2에 관해서, 단일 Redis 인스턴스는 분산 시스템이 아닙니다. 원격 중앙 집중식 저장소입니다. 이제 여러 개의 Redis 인스턴스를 사용하여 분산 시스템을 구축 할 수 있습니다. 스스로하는 방법이기 때문에 CP 또는 AP 시스템으로 만들 수 있습니다.

단일 인스턴스는 자신의 액티비티를 슬레이브 인스턴스에 복제 할 수 있습니다 (따라서 결국 마스터와 일치합니다). 응용 프로그램은 항상 읽기 및 쓰기를 위해 마스터에 연결하도록 선택할 수 있습니다. 이 경우 CP 시스템을 얻을 수 있습니다. 또한 마스터에 쓰고 모든 인스턴스 (슬레이브 포함)에서 읽을 수 있으므로 AP 시스템을 얻을 수 있습니다. 내가 "할 수있다"고 말한 이유는 Redis 위에 시스템을 구축하기 위해 상당한 노력이 필요하기 때문입니다.

샤딩 및 마스터 / 슬레이브 복제를 혼합하여 필요한 분산 시스템을 구축 할 수 있습니다. 그러나 Redis는이를 수행하기위한 기본적인 벽돌만을 제공합니다. 특히 탄력성과 HA를 다루는 데는 거의 도움이되지 않습니다 (그리고 CAP 정리에서 P를 다룹니다). IMO, Redis sentinel 만으로는 역할 관리를 다루기 때문에 HA Redis 구성을 지원하기에 충분하지 않습니다. 자원 관리자로이를 보완하고 클라이언트 / 응용 프로그램에 많은 논리를 넣어야합니다.

Redis Cluster 라는 프로젝트가 진행 중입니다.이 프로젝트의 목적은 최소한의 사용 준비가 된 분산 시스템을 제공하는 것입니다.하지만 여전히 많은 것들이 부족하고 생산 목적으로는 아직 사용할 수 없습니다.

기성품의 분산 된 저장소가 필요하다면 Redis는 아마도 좋은 선택이 아닙니다. Cassandra, Riak, MongoDB, Couchbase, Aerospike, MySQL Cluster, Oracle NoSQL 등에서 더 나은 서비스를 제공 할 것입니다. 그러나 자신 만의 전문 시스템을 구축하려는 경우 Redis는 우수한 구성 요소입니다.





nosql couchdb cassandra redis