[database] 언제 Cassandra를 복용해서는 안되나요?

최근 카산드라 와 관련된 많은 이야기가있었습니다 .

트위터, 디그, 페이스 북 등이 모두 사용합니다.

언제 이치에 맞습니까?

  • 카산드라 사용
  • 카산드라를 사용하지 않고
  • Cassandra 대신 RDMS를 사용하십시오.


답변

은 총알과 같은 것은 없으며 모든 것은 특정 문제를 해결하기 위해 만들어졌으며 자체 장단점이 있습니다. 어떤 문제 설명을 가지고 있으며 해당 문제에 가장 적합한 솔루션은 무엇입니까?

질문과 같은 순서로 질문에 하나씩 답변 해 드리겠습니다. Cassandra는 NoSQL 데이터베이스 제품군을 기반으로하므로 질문에 대답하기 전에 NoSQL 데이터베이스를 사용해야하는 이유를 이해하는 것이 중요합니다.

NoSQL을 사용하는 이유

RDBMS의 경우,이 범주의 MySQL, Oracle, MS SQL, PostgreSQL과 같은 모든 데이터베이스는 ACID 속성을 지향하는 거의 동일한 종류의 솔루션을 제공하므로 선택이 매우 쉽습니다. NoSQL의 경우 모든 NoSQL 데이터베이스가 서로 다른 솔루션을 제공하므로 앱 / 시스템 요구 사항에 가장 적합한 솔루션을 이해해야하기 때문에 결정이 어려워집니다. 예를 들어 MongoDB는 시스템에 스키마가없는 문서 저장소가 필요한 사용 사례에 적합합니다. HBase는 검색 엔진, 로그 데이터 분석 또는 거대한 2 차원 조인리스 테이블 스캔이 필요한 장소에 적합 할 수 있습니다. Redis는 트리, 대기열, 링크 된 목록 등과 같은 다양한 데이터 구조에 대한 메모리 내 검색을 제공하도록 설계되었으며 실시간 리더 보드, 펍 서브 종류의 시스템을 만드는 데 적합 할 수 있습니다. 마찬가지로이 범주에는 다른 문제 설명에 적합한 다른 데이터베이스 (Cassandra 포함)가 있습니다. 이제 원래 질문으로 이동하여 하나씩 답변 해 보겠습니다.

카산드라 사용시기

Cassandra는 NoSQL 제품군의 일부이기 때문에 요구 사항 중 하나가 매우 무거운 쓰기 시스템을 갖고 있고 저장된 데이터 위에 응답 성이 뛰어난보고 시스템을 갖고 자하는 문제에 대한 솔루션을 제공합니다. 각 요청에 대해 로그 데이터가 저장되는 웹 분석의 유스 케이스를 고려하고 시간별, 브라우저 별, IP 등으로 실시간으로 적중을 계산하기 위해 분석 플랫폼을 구축하려고합니다. Cassandra가 적합한 사용 사례에 대한 자세한 내용은 블로그 게시물을 참조하십시오 .

Cassandra 대신 RDMS를 사용하는 경우

Cassandra는 NoSQL 데이터베이스를 기반으로하며 ACID 및 관계형 데이터 속성을 제공하지 않습니다. ACID 속성 (예 : 재무 데이터)에 대한 강력한 요구 사항이있는 경우 Cassandra는이 경우에 적합하지 않습니다. 분명히, 이에 대한 해결 방법을 만들 수 있지만 ACID 속성을 시뮬레이션하기 위해 많은 응용 프로그램 코드를 작성하게되어 시장 출시 시간이 크게 단축 될 수 있습니다. 또한 Cassandra로 이러한 종류의 시스템을 관리하는 것은 복잡하고 지루할 것입니다.

카산드라를 사용하지 않을 때

위의 설명이 의미가 있다면 대답해야한다고 생각하지 않습니다.


답변

분산 데이터 시스템을 평가할 때는 CAP 정리를 고려해야합니다. 일관성, 가용성 및 파티션 허용 오차 중 두 가지를 선택할 수 있습니다.

Cassandra는 최종 일관성을 지원하는 사용 가능한 파티션 허용 시스템입니다. 자세한 내용은 내가 쓴이 블로그 게시물 : NoSQL Systems에 대한 Visual Guide를 참조하십시오 .


답변

Cassandra는 특정 문제에 대한 해답입니다. 데이터가 너무 많아서 하나의 서버에 맞지 않을 때는 어떻게해야합니까? 모든 데이터를 여러 서버에 저장하고 은행 계좌를 해치지 않고 개발자를 미치게 만들지 않는 방법은 무엇입니까? Facebook은 매일 4 테라 바이트의 새로운 압축 데이터를받습니다. 이 숫자는 1 년 안에 두 번 이상 증가 할 것입니다.

이 정도의 데이터가 없거나 Enterprise Oracle / DB2 클러스터 설치 비용과 수백만 달러를 지불하고이를 설정 및 유지 관리하는 데 필요한 전문가가 있다면 SQL 데이터베이스를 사용하는 것이 좋습니다.

그러나 Facebook은 더 이상 cassandra를 사용하지 않으며 이제는 더 빠른 성능과 더 나은 제어를 위해 애플리케이션 스택에서 파티셔닝을 거의 독점적으로 MySQL을 사용합니다.


답변

NoSQL의 일반적인 아이디어는 응용 프로그램에 가장 적합한 데이터 저장소를 사용해야한다는 것입니다. 재무 데이터 테이블이있는 경우 SQL을 사용하십시오. 관계형 스키마에 매핑하기 위해 복잡하거나 느린 쿼리가 필요한 개체가있는 경우 개체 또는 키 / 값 저장소를 사용하십시오.

물론 실제로 발생하는 거의 모든 문제는이 두 극단 사이에 있으며 해결책이 완벽하지는 않습니다. 각 상점의 기능과 하나를 다른 것보다 사용했을 때의 결과를 고려해야합니다. 이는 해결하려는 문제에 매우 특정한 것입니다.


답변

Cassandra를 사용하고 사용하지 않을 때에 대한 답변 외에 Cassandra를 사용하기로 결정한 경우 Cassandra 자체를 사용하지 말고 많은 사촌 중 하나를 사용하는 것이 좋습니다.

위의 답변 중 일부는 Cassandra와 많은 속성을 공유하는 다양한 “NoSQL”시스템을 이미 지적했으며, 약간의 차이가 있거나 큰 차이가 있으며 특정 요구에 대해 Cassandra 자체보다 낫습니다.

또한 최근 (이 질문이 처음 요청 된 후 몇 년이 지난 후) Scylla라는 Cassandra 클론 ( https://en.wikipedia.org/wiki/Scylla_(database) 참조 )이 릴리스되었습니다. Scylla는 C ++에서 Cassandra를 오픈 소스로 다시 구현 한 것으로 원본 Java Cassandra보다 처리량이 높고 지연 시간이 현저히 낮으며 기능, API 및 파일 형식과 호환됩니다. 따라서 이미 카산드라를 고려하고 있다면 실라도 고려할 수 있습니다.


답변

Cassandra를 배포하는 동안 누군가와 이야기하면 다대 다를 잘 처리하지 못합니다. 그들은 초기 테스트를 위해 해킹 작업을 수행하고 있습니다. 나는 카산드라 컨설턴트와이 문제에 관해 이야기했고, 만약 당신이이 문제가 있다면 그것을 추천하지 않을 것이라고 말했다.


답변

자신에게 다음과 같은 질문을해야합니다.

  1. (볼륨, 속도) 많은 컴퓨터에서 쓰기를 처리 할 수없는 많은 정보를 작성하고 읽을 것입니다.
  2. (글로벌) 전 세계의 다른 지역에서 쓰기에 액세스 할 수 있도록 전 세계에서이 쓰기 및 읽기 기능이 필요합니까?
  3. (신뢰할 수 있음) VM, 컨테이너 또는 베어 메탈에 관계없이 어느 클라우드, 어느 국가에 관계없이이 데이터베이스를 항상 가동하고 다운시키지 않는가?
  4. (확장 성) 쉽게 확장하고 선형 적으로 확장 할 수 있으려면이 데이터베이스가 필요합니까?
  5. (일관성) 인증이 필요한 곳에서 일부 쓰기가 비동기 적으로 발생할 수있는 TUNABLE 일관성이 필요합니까?
  6. (기술) 이 기술을 배우기 위해 필요한 모든 일을 기꺼이 하시겠습니까? 어디서나 모든 사람에게 빠른 글로벌 분산 데이터베이스를 만들 수 있습니까?

이러한 질문 중 하나라도 “아마도”또는 “아니오”라고 생각되면 다른 것을 사용해야합니다. 당신이 그들 모두에 대한 답변으로 “지옥”을 가지고 있다면, 당신은 카산드라를 사용해야합니다.

한 상자에서 모든 작업을 수행 할 수 있으면 RDBMS를 사용하십시오. 아마도 대부분의 사람들보다 쉽고 아마도 누구나 함께 할 수 있습니다.