MySQL, PostgreSQL 및 MS SQL Server와 같은 솔루션은 관계형 데이터베이스 시스템이고 NoSQL, MongoDB 등은 비 관계형 DBMS라는 것을 알고 있습니다.
그러나 두 시스템 유형의 차이점은 무엇입니까?
평신도 용어가 바람직합니다.
감사.
MySQL, PostgreSQL 및 MS SQL Server와 같은 솔루션은 관계형 데이터베이스 시스템이고 NoSQL, MongoDB 등은 비 관계형 DBMS라는 것을 알고 있습니다.
그러나 두 시스템 유형의 차이점은 무엇입니까?
평신도 용어가 바람직합니다.
감사.
답변:
관계형 데이터베이스는 SQL == Structured Query Language로 추출 된 수학적 기반 (집합 이론, 관계 이론)을 가지고 있습니다.
NoSQL의 다양한 형태 (예 : 문서 기반, 그래프 기반, 객체 기반, 키-값 저장소 등)는 단일 기반 수학 이론을 기반으로 할 수도 있고 그렇지 않을 수도 있습니다. S. Lott가 올바르게 지적했듯이 계층 적 데이터 저장소에는 실제로 수학적 기반이 있습니다. 그래프 데이터베이스도 마찬가지 입니다.
NoSQL 데이터베이스에 대한 범용 쿼리 언어를 모릅니다.
흠, 질문이 무엇인지 잘 모르겠습니다.
제목에서는 데이터베이스 (DB)에 대해 묻는 반면 텍스트 본문에서는 데이터베이스 관리 시스템 (DBMS)에 대해 질문합니다. 이 두 가지는 완전히 다르며 다른 답변이 필요합니다.
DBMS는 DB에 접근 할 수있는 도구입니다.
데이터 자체 외에 DB는 데이터가 어떻게 구성되는지에 대한 개념입니다.
따라서 OO가 아닌 컴파일러를 사용하여 Oriented Object 방법론으로 프로그래밍 할 수있는 것과 마찬가지로 RDBMS없이 관계형 데이터베이스를 설정하거나 RDBMS를 사용하여 비 관계형 데이터를 저장할 수 있습니다.
관계형 데이터베이스 (RDB)가 무엇을 의미하는지에 초점을 맞추고 시스템이 다른 사람들에게 어떤 일을하는지에 대한 논의를 남길 것입니다.
관계형 데이터베이스 (개념)는 서로 다른 '테이블'또는 서로 다른 유형의 데이터 버킷의 정보를 연결할 수있는 데이터 구조입니다. 데이터 버킷에는 키 또는 인덱스 (버킷 내 데이터의 원자 청크를 고유하게 식별 할 수 있음)가 포함되어야합니다. 다른 데이터 버킷은 해당 키를 참조하여 데이터 원자와 키가 가리키는 원자 사이에 링크를 만들 수 있습니다.
비 관계형 데이터베이스는 서로 다른 버킷의 데이터를 서로 연결하는 명시적이고 구조화 된 메커니즘없이 데이터를 저장합니다.
이러한 체계를 구현하는 것과 관련하여 색인이있는 종이 파일이 있고 다른 종이 파일에서 관련 정보를 얻기 위해 색인을 참조하면 관계형 데이터베이스를 구현 한 것입니다. 따라서 컴퓨터가 필요하지 않다는 것을 알 수 있습니다 (물론 도움을 줄 사람이 없으면 매우 빠르게 지루해질 수 있음). RDBMS는 작업에 적합한 도구이지만 RDBMS는 필요하지 않습니다. 즉, 다양한 도구가 수행 할 수있는 작업에는 차이가 있으므로 작업에 적합한 도구를 선택하는 것이 그렇게 간단하지 않을 수 있습니다.
나는 이것이 평신도 용어로 충분하고 이해에 도움이되기를 바랍니다.
당신이 "아는"것의 대부분은 잘못되었습니다.
우선, 몇몇 관계 전문가들이 일상적으로 (때로는 분명하게) 지적했듯이 SQL은 많은 사람들이 생각하는 것만 큼 관계 이론과 거의 일치하지 않습니다. 둘째, "NoSQL"항목의 대부분의 차이점은 관계형인지 여부와는 상대적으로 거의 관련이 없습니다. 마지막으로 "NoSQL"이 SQL과 어떻게 다른지 말하기는 매우 어렵습니다. 둘 다 매우 광범위한 가능성을 나타 내기 때문 입니다.
신뢰할 수있는 한 가지 주요 차이점은 SQL을 지원하는 거의 모든 것이 데이터베이스 자체의 트리거와 같은 것을 지원한다는 것입니다. 즉, 데이터가 항상 내부적으로 일관성이 있도록 규칙을 데이터베이스에 적절하게 설계 할 수 있습니다. 예를 들어 데이터베이스에서 사람 이주소가 있습니다. 그렇게하면 사람을 추가 할 때마다 기본적으로 그 사람을 주소와 연결해야합니다. 새 주소를 추가하거나 기존 주소와 연결할 수 있지만 어떤 식 으로든 사람은 주소를 가지고 있어야합니다. 마찬가지로 주소를 삭제하면 현재 해당 주소에있는 모든 사람을 삭제하거나 서로를 다른 주소와 연결해야합니다. 모든 사람에게 어머니가 있어야하고, 모든 사무실에 전화 번호가 있어야한다고 말하는 것과 같이 다른 관계에서도 똑같이 할 수 있습니다.
사물의 이러한 종류는 또한 데이터베이스에서 다른 사람의 외모는 사람을 추가하는 정도로하면, 그들은 하나 전혀 사람을 볼 것이다, 그렇지 않으면 그들은 사람이 볼 수, 원자 일이 보장되는 주 에 을 주소 (또는 어머니 등)
대부분의 NoSQL 데이터베이스는 적절한 데이터베이스에 이러한 종류의 적용을 제공 하지 않습니다 . 데이터베이스를 사용하는 코드에서 데이터에 필요한 관계를 적용하는 것은 사용자에게 달려 있습니다. 대부분의 경우 부분적으로 만 정확한 데이터를 볼 수도 있습니다. 따라서 모든 사람이 부모와 연결되어야하는 가계도를 가지고 있어도 어떤 제약을 가해도 실제로는 그렇지 않을 수 있습니다. 시행. 어떤 사람들은 당신이 마음대로 그렇게 할 수 있습니다. 다른 사람들은 그것이 얼마나 오래 지속될 수 있는지에 대해 의문을 가질 수 있지만 일시적으로 만 발생한다고 보장합니다.
관계형 데이터베이스는 데이터를 처리하기 위해 공식적인 술어 시스템을 사용합니다. 기본 물리적 구현은 실체가 없으며 특정 작업에 최적화하기 위해 다양 할 수 있지만 항상 관계형 모델을 가정해야합니다 . 평신도의 용어로, 그것은 단지 내 테이블 (관계)의 각 행 (튜플)이 얼마나 많은 값 (속성)을 가지고 있는지 정확히 알고 있으며 이제 그 사실을 철저히 활용하고 극단적입니다. 그것이 짐승 의 진정한 본질입니다.
우리는 분명히 관계형 육성을 가진 세대이기 때문에 관계형 모델의 관점에서 NoSQL 데이터베이스 모델을 살펴보면 다시 평신도의 관점에서 보면 첫 번째 명백한 차이점은 행이 할 수있는 값의 수에 대한 가정이 없다는 것입니다. 이제까지 포함됩니다. 이것은 실제로 문제를 지나치게 단순화하고 모든 NoSQL 데이터베이스의 물리적 모델의 복잡성에 명확하게 적용되지는 않지만 관계형 모델의 정점이며 우리가 남겨야하는 첫 번째 가정입니다. 도약해야합니다.
우리는 모든 DBMS에 대해 사실 인 두 가지에 동의 할 수 있습니다. 모든 종류의 데이터를 저장할 수 있고 상상할 수있는 방식으로 데이터를 관리 할 수 있도록 충분한 수학적 토대가 있습니다. 현실은 두 점 중 하나를 테스트에 넣는 실수를 결코하고 싶지 않고 실제 DBMS가 실제로 만들어진 것에 충실하기를 원할 것입니다. 평신도의 용어로 : 내면의 짐승을 존중하십시오!
(분명히 관계형 모델을 중심으로하는 잘 확립 된 표준을 NoSQL 데이터베이스에서 제공하는 다양한 특징과 비교하는 것을 피했습니다. 원할 경우 NoSQL 데이터베이스를 완전하지 않은 DBMS의 포괄적 용어로 고려하십시오. 다른 모든 것을 제외하고 관계형 모델을 가정하십시오. 차이점은 너무 많지만 이것이 주요 차이점이며 두 가지를 이해하는 데 가장 유용 할 것이라고 생각합니다.)
약간의 기술을 언급하는 수준에서이 질문을 설명해보세요.
비교를 위해 MongoDB와 Traditional SQL을 사용하고 Twitter에 트윗을 게시하는 시나리오를 상상해보십시오. 이 트윗에는 9 개의 사진이 포함되어 있습니다. 이 트윗과 해당 사진을 어떻게 저장합니까?
전통적인 관계 SQL의 경우 트윗과 사진을 별도의 테이블에 저장하고 새 테이블을 구축하여 연결을 나타낼 수 있습니다.
또한 이미지 유형 인 필드를 설정하고 9 개의 그림을 이진 문서로 압축하여이 필드에 저장할 수 있습니다.
MongoDB를 사용하면 다음과 같은 문서를 작성할 수 있습니다 (관계형 SQL의 테이블 개념과 유사).
{
"id":"XXX",
"user":"XXX",
"date":"xxxx-xx-xx",
"content":{
"text":"XXXX",
"picture":["p1.png","p2.png","p3.png"]
}
따라서 제 생각에 가장 큰 차이점은 데이터를 저장하는 방법과 이들 간의 관계에 대한 저장 수준입니다.
이 예에서 데이터는 트윗과 사진입니다. 그들 사이의 저장 수준에 대한 다른 메커니즘은 또한 둘 사이의 차이에서 중요한 역할을합니다.
이 작은 예제가 SQL과 NoSQL (ACID 및 BASE)의 차이점을 보여주는 데 도움이되기를 바랍니다.
다음은 인터넷에서 NoSQL의 목표에 대한 그림 링크입니다.
관계형과 비 관계형의 차이점은 정확히 그렇습니다. 관계형 데이터베이스 아키텍처는 기본 키, 외래 키 등과 같은 제약 조건 개체를 제공하여 하나의 관계에서 두 개 이상의 테이블을 연결할 수 있습니다. 이것은 데이터베이스가 나타내는 것에 대한 정보를 여러 다른 테이블로 분할하여 데이터의 무결성을 유지할 수 있도록 테이블을 정규화 할 수 있도록하는 것이 좋습니다.
예를 들어, 직원에 대한 정보를 포함하는 일련의 테이블이 있다고 가정합니다. 다른 테이블에서 해당 레코드와 관련된 모든 레코드를 삭제하지 않고는 테이블에서 레코드를 삭제할 수 없습니다. 이러한 방식으로 데이터 무결성을 구현합니다. 비 관계형 데이터베이스는 데이터 무결성을 구현할 수있는 이러한 제약 조건을 제공하지 않습니다.
데이터베이스의 테이블을 채우는 데 사용되는 프런트 엔드 애플리케이션에서이 제약 조건을 구현하지 않는 한, 와일드 웨스트와 비교할 수있는 혼란을 구현하고 있습니다.
먼저 데이터베이스가 필요한 이유를 말씀 드리겠습니다.
효율적인 방식으로 저장된 데이터를 검색 할 수 있도록 정보를 구성하는 데 도움이되는 데이터베이스가 필요합니다.
관계형 데이터베이스 관리 시스템 (SQL)의 예 :
1) Oracle 데이터베이스
2) SQLite
3) PostgreSQL
4) MySQL
5) 마이크로 소프트 SQL 서버
6) IBM DB2
비 관계형 데이터베이스 관리 시스템 (NoSQL)의 예
1) 몽고 DB
2) 카산드라
3) 레디 스
4) 카우치베이스
5) HBase
6) 문서 DB
7) Neo4j
관계형 데이터베이스에는 정보가 행과 열의 형태로 테이블에 저장되는 것처럼 정규화 된 데이터가 있으며, 일반적으로 데이터가 정규화 된 형식 인 경우 데이터 중복성을 줄이는 데 도움이되며 테이블의 데이터는 일반적으로 서로 관련되므로 데이터를 검색하고 싶을 때 조인 문을 사용하여 데이터를 쿼리하고 필요에 따라 데이터를 검색 할 수 있습니다. 이것은 더 많은 쓰기, 적은 읽기, 적은 데이터를 원할 때 적합하며 상대적으로 매우 쉽습니다. 비 관계형 데이터베이스보다 테이블의 데이터를 업데이트합니다. 수평 확장 불가, 어느 정도 수직 확장 가능 CAP (일관성, 가용성, 파티션 허용) 및 ACID (원 자성, 일관성, 격리, 기간) 준수
PostgreSQL을 예로 들어 관계형 데이터베이스에 데이터를 입력하는 방법을 보여 드리겠습니다.
먼저 다음과 같이 제품 테이블을 만듭니다.
CREATE TABLE products (
product_no integer,
name text,
price numeric
);
그런 다음 데이터를 삽입하십시오.
INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);
여기 관계형 데이터베이스에서는 외래 키, 주제 ID를 통해 관계를 사용하여 학생 테이블과 주제 테이블을 연결할 수 있지만 비 관계형 데이터베이스에서는 관계가 없기 때문에 두 개의 문서를 가질 필요가 없으므로 모든 주제 세부 정보를 저장하고 한 문서의 학생 세부 정보에 학생 문서가 표시되면 데이터가 중복되어 기록 업데이트가 번거로워집니다.
비 관계형 데이터베이스에는 고정 스키마가없고 데이터가 정규화되지 않습니다. 데이터 간의 관계가 생성되지 않고 모든 데이터가 대부분 하나의 문서에 저장됩니다. 많은 데이터를 처리 할 때 적합하며 한 번에 많은 데이터를 전송할 수 있습니다. 고정 된 스키마가 없기 때문에 많은 양의 읽기와 쓰기가 적고 업데이트가 적고 데이터를 쿼리하기가 조금 어려운 경우에 가장 적합합니다. 수평 및 수직 확장이 가능합니다. CAP (일관성, 가용성, 파티션 허용) 및 BASE (기본적으로 사용 가능, 소프트 상태, 최종 일관성) 준수.
Mongodb를 사용하여 비 관계형 데이터베이스에 데이터를 입력하는 예를 보여 드리겠습니다.
db.users.insertOne({name: ‘Mary’, age: 28 , occupation: ‘writer’ })
db.users.insertOne({name: ‘Ben’ , age: 21})
따라서 db라는 데이터베이스에는 사용자라는 컬렉션과 데이터를 추가하는 insertOne이라는 문서가 있으며 첫 번째 레코드에는 3 개의 속성이 있고 두 번째 속성에는 2 개의 속성 만 있으므로 고정 된 스키마가 없음을 이해할 수 있습니다. , 이것은 비 관계형 데이터베이스에서는 문제가되지 않지만 관계형 데이터베이스에는 고정 된 스키마가 있으므로 관계형 데이터베이스에서는 수행 할 수 없습니다.
다른 예를 살펴 보겠습니다.
({Studname: ‘Ash’, Subname: ‘Mathematics’, LecturerName: ‘Mr. Oak’})
따라서 우리는 비 관계형 데이터베이스에 정의 된 관계가 없기 때문에 학생 세부 사항과 주제 세부 사항을 하나의 문서에 입력 할 수 있지만 여기서는 데이터 중복이 발생할 수 있으므로 업데이트 오류가 발생할 수 있습니다.
이것이 모든 것을 설명하기를 바랍니다.
평범한 용어로 강력하게 구조화 된 것과 구조화되지 않은 것이므로 DB에 대한 적응성의 정도가 다릅니다. 특히 특정 참조 색인이 다른 항목에 링크 될 수 있는지 확인해야하므로 색인화에서 차이가 발생합니다. 관계형 DB의보다 엄격한 구조는이 요구 사항에서 비롯됩니다.
NosDB는 관계형 및 비 관계형 DB를 모두 제공하고 http://www.alachisoft.com/nosdb/sql-cheat-sheet.html 을 쿼리하는 방법을 제공합니다 .