몽고db - nosql 종류 비교



Cassandra(및 NoSQL)가 RDBMS에 대한 더 나은 솔루션을 만드는 이유는 무엇입니까? (8)

내가 묻는 것은 "언제 RDBMS에서 NoSQL을 선택해야합니까?"라고 생각합니다.

[경고 : 전에 NoSQL에 대해 읽은 적이 없습니다.]

Wikipedia 에 따르면 NoSQL은 조인이 좋지 않습니다. 이는 참조 무결성 및 정규화가 없음을 의미합니다.

글쎄요, NoSQL은 지금 전문 용어입니다. 나는 아직 ColumnFamilies와 SuperColumns 등의 주위에 머리를 쓰고있다. 그러나 나는 데이터가 어떻게 맵핑되는지를보고 있었다.

this 기사와 다른 기사를 읽은 후 데이터가 JSON 형식과 같은 방식으로 매핑 된 것 같습니다.

Users = {
    1: {
        username: "dave",
        password: "blahblah",
        dateReged: "1/1/1"
    },
    2: {
        username: "etc",
        password: "blahblah",
        dateReged: "2/1/1",
        comment: "this guy has a comment and dave doesns't"
    },
}

RDBMS 형식은 다음과 같습니다.

Table name: "Users"

id | username | password | dateReged | comment
---+----------+----------+-----------+--------
 1 |  dave    | blahblah |  1/1/1    |
---+----------+----------+-----------+--------
 2 |  etc     | blahblah |  2/1/1    | this guy has a comment and dave doesn't

이 내용을 올바르게 이해하고 위의 예가 옳다 고 가정하면 NoSQL 디자인에 비해 RDBMS 디자인을 선택하는 이유는 무엇입니까? 개인적으로 JSON 구조로 작업하는 편이 낫습니다. MySQL 대신 NoSQL을 선택해야한다는 의미입니까?

내가 묻는 것은 "언제 RDBMS에서 NoSQL을 선택해야합니까?"라고 생각합니다.

내가 말했던 것처럼, 나는 여전히 카산드라 데이터베이스를 구현하는 방법을 완전히 이해하지 못하고있다. 즉, 위의 사용자 테이블을 새 데이터베이스에 만드는 방법은 무엇입니까? 어떤 자습서, 문서, 등 당신이 가리킬 수 위대한 것입니다. 내 google'ing '처음부터 시작'의 관점에서 많이 나타나지 않았다 ...


Answer #1

Cassandra 자체는 RDBMS보다 우수하지 않습니다. 어떤 상황에서는 더 좋습니다. RDBMS는 트랜잭션 처리, 마스터 데이터 관리, 참조 데이터, 데이터웨어 하우징 및 (일부 형태의) BI에 비해 월등히 우수합니다.

응용 프로그램에 유연한 스키마, 가변 길이 행, 가변 유형의 열, 최종 무결성, 상용 서버의 수평 확장 성 및 분산 아키텍처를 통한 고 가용성이 필요한 경우 NOSQL을 사용하십시오.

NOSQL은 여러 가지 이유로 조인을하지 않습니다. NOSQL 파일이로드되기 전에 이미 데이터에 조인 했으므로 필요하지 않습니다. 멀리 떨어진 서버에 대한 분산 조인 (distributed join)은 자원 집약적 일 것입니다. 위의 첫 번째 이유는 간단합니다. 필요한 모든 데이터를 단일 구조에 포함 시켰습니다. 데이터를 임베드하지 않고 연결해야한다면 큰 성과를 기대하지 마십시오. 연결은 응용 프로그램이 제공하는 조인 (join)이 데이터를 통합하는 이점이 없어도 응용 프로그램이 제공하는 조화를 완곡 어법으로 표현한 것입니다. 해시 키가 데이터 분배 방법이라고 가정하면 해시 키가 같은 여러 레코드가 함께 배치됩니다. 따라서 결합이 허용되면 결합 된 데이터는 모두 동일한 서버에있게됩니다.

그것은 흑백이 아닙니다.


Answer #2

NoSQL의 가장 큰 장점은 수평 확장 성과 분산 형 스토리지입니다. 즉, 다수의 '클러스터 노드'를 가지고 병렬로 쓸 수 있습니다. 클러스터는 결국 변경 사항이 다른 클러스터 노드에 전파되도록합니다 (최종 일관성).

NoSQL은 SQL에 관한 것이 아닙니다 (이 용어는 "SQL뿐 아니라"을 의미합니다). 실제로 일부 NoSQL 제품은 SQL의 하위 집합을 지원합니다. 데이터 형식이 다른 이유 (JSON 또는 표 / 데이터 쌍 대 속성 / 값 쌍 목록)는 다음과 같습니다. 관계형 데이터베이스 내에서 열 (및 열 이름)의 수는 중앙 위치에 정의되어 있으므로 수평으로 잘 작동하지 않습니다 확장 성 (스키마 변경을 위해 모든 클러스터 노드를 중지해야 함) 또한 조인은 수평 확장 성을 손상시킬 수 있으므로 지원되지 않습니다 (데이터가 분산되어있는 경우 여러 클러스터 노드의 데이터를 읽을 필요가 있음).



Answer #4

NoSql의 이점은 간단하고, 당신의 OO 얼룩이 있다면 모든 당신의 끈기가 가득 채워야한다는 것입니다.

SQL 기반의 실시간 데이터베이스의 장점은 독창적 인 디자인에서 예상하지 못한 방식으로 데이터를 쉽게 재사용하고 확장 할 수 있다는 것입니다. 또한 "객체"데이터베이스는 COUNT, SUM, AVG와 같은 SQL 집계 쿼리와 동등한 작업을 수행하고자 할 때 매우 유용합니다.

Google은 어디에서나 가장 큰 OO 데이터베이스 인 BIGTABLE (그리고 아마도 가장 큰 데이터베이스 기간) 또한 인덱싱 및 강력한 타이핑과 같은 SQL 및 SQL 기능을 지원합니다.


Answer #5

RDBMS '는 모두 일관성에 관한 것입니다. 거래가 많아 질수록 데이터에 큰 도움이됩니다. ACID (원 자성, 일관성, 격리, 내구성) 참조. 때로는 로그의 데이터를 저장하거나 변경하지 않을 데이터를 작업 할 때 누적되는 것과 같이 모든 것을 필요로하지 않습니다.

NoSQL 데이터베이스를 사용하면 트랜잭션 요구 사항을 완화하고 성능을 향상시킬 수 있으며 대규모 분산 저장 장치 저장소로 쉽게 확장 할 수 있습니다.


Answer #6

당신이 구글이라면, 당신은 RDBMS보다 NoSQL이 더 쉬울 수있는 위치에있을 것입니다. 그렇지 않으므로, RDBMS가 제공하는 많은 이점들이 아마도 어느 정도 유용 할 것입니다. 단일 노드에서 NoSQL은 RDBMS보다 절대적으로 장점이 없습니다. 하지만 RDBMS는 NoSQL보다 많은 이점을 제공합니다. 그들은 무엇인가?

RDBMS는 소유하고있는 데이터와 요구하는 데이터를 이해하여 가능한 가장 효율적인 방식으로 해당 데이터를 반환 할 수있는 방법을 사용합니다. 당신이 어떤 칼럼에 대해 물어 보지 않았다면, rdbms는 칼럼을 검색하는 데 낭비하지 않습니다. 두 테이블에서 공통적으로 필드가있는 행에 관심이 있다면 (RDBMS는 조인, btw입니다), RDBMS는 모든 단일 행 쌍을 검사 할 필요가 없으며 일반적으로 NoSQL db가 수행하는 것이 있습니다. 너는 모든 것을 검사하고 너를 점검하게한다. RDBMS를 사용하면 일반적으로 "사용중인 데이터"에 대한 쿼리를 작성할 수 있습니다 (예 : "날짜가 화요일"인 경우). 인덱스가 지원하는 경우 (해당 쿼리를 많이 수행하면 색인)을 사용하면 해당 행을 효율적으로 가져올 수 있습니다.

RDBMS가 좋은 또 다른 이유가 있습니다. 트랜잭션은 RDBMS에서 쉽게 수행 할 수 있지만 NoSQL 데이터베이스를 올바르게 작성하는 것이 훨씬 어렵습니다. 블로깅 엔진을 구현한다고 가정합니다. 모든 게시물에서 URL (URL에 나타나는 게시물 제목)이 고유해야한다고 가정합니다. RDBMS에서 우연히 잘못 이해하지 못하게 할 수 있습니다. NoSQL 데이터베이스를 사용하면 일종의 트랜잭션 무결성을 지원하는 경우 일반적으로 샤드 수준에 있기 때문에 그러한 종류의 무결성을 요구할 수있는 모든 항목이 동일한 샤드에 있어야합니다. 어떤 사용자 쌍이라도 같은 순간에 게시 할 수 있기 때문에 모든 사용자의 게시물은 동일한 효과를 얻기 위해 동일한 샤드에 있어야합니다. 그렇다면 NoSQL의 이점은 전혀 없습니다.


Answer #7

대답은 쉽습니다. 데이터 저장소가 필요하다면 NoSQL을 사용하고 더 많은 기능이 필요하다면 데이터를 저장하는 것이 좋습니다. RDBMS를 사용하십시오.





cassandra