NoSQL이란 무엇이며 어떻게 작동하며 어떤 이점이 있습니까? [닫은]


168

나는 NoSQL에 대해 듣고 있었고 DB 상호 작용이 종종 웹 속도의 병목 현상이기 때문에 결국 SQL DB 저장 방법을 대체 할 수 있다고 들었습니다.

그래서 몇 가지 질문이 있습니다.

  1. 정확히 무엇입니까?

  2. 어떻게 작동합니까?

  3. 왜 SQL Database를 사용하는 것보다 낫습니까? 그리고 그것은 얼마나 낫습니까?

  4. 이 기술이 아직 구현하기에는 너무 새로운가, 아니면 살펴볼 가치가 있는가?


여기에 좋은 답변이 많이 있습니다. 나는 또한 다른 유사한 질문에 대한 유용한 답을 발견 : (1) 150 +는 upvotes 에는 SQL 차 은유와 참고 문헌을 많이 설명하지 (2) 70 + upvtes 되는 NoSQL NoSQL에을 (를) 제작 한 이유와 방법 / 설명 역사 설명과 약간의에 대한 오늘 존재하는 이유
Trevor Boyd Smith

답변:


110
  1. 정확히 무엇입니까?

    한편으로는 특정 시스템 이지만 관계형 DB 모델을 따르지 않는 다양한 새로운 데이터 스토리지 백엔드에 대한 일반적인 단어가되었습니다 .

  2. 어떻게 작동합니까?

    일반 이름으로 레이블이 지정된 각 시스템은 다르게 작동하지만 기본 아이디어는 일반 RDBMS의 모든 기능을 지원하지는 않지만 여전히 유용한 기능을 충분히 갖춘 DB 모델을 사용하여 확장 성과 성능을 향상시키는 것입니다. 어떤면에서 그것은 한 번에 정확히 트랜잭션에 대한 지원이 부족하지만, MySQL은, 같은거야 때문에 능가 다른 DB 시스템을 관리하는의. 트랜잭션을 요구하지 않는 방식으로 앱을 작성할 수 있다면 좋았습니다.

  3. 왜 SQL Database를 사용하는 것보다 낫습니까? 그리고 그것은 얼마나 낫습니까?

    사이트를 대규모로 확장해야 할 때 최상의 하드웨어에서 실행 가능한 최상의 RDBMS가 가능한 한 많은 비용을 감당할 수 없을 정도로 더 좋을 것입니다. 그것이 얼마나 더 나은지는 특정 사용 사례에 달려 있습니다 (많은 조인과 결합 된 많은 업데이트 활동은 "전통적인"RDBMS에서는 매우 어렵습니다)-극단적 인 경우 1000 배가 될 수 있습니다.

  4. 이 기술이 아직 구현하기에는 너무 새로운가, 아니면 살펴볼 가치가 있는가?

    주로 달성하려는 대상에 따라 다릅니다. 사용하기에 충분히 성숙합니다. 그러나 실제로 대규모로 확장해야하는 애플리케이션은 거의 없습니다. 대부분의 경우 전통적인 RDBMS로 충분합니다. 그러나 인터넷 사용이 항상 유비쿼터스 화되면서 응용 프로그램이 더 일반적이 될 가능성이 높습니다 (아마도 지배적이지는 않음).


2
무엇을 의미 transaction합니까?
Shawn Mclean


"다양한 새로운 데이터 스토리지 백엔드"링크가 죽었습니다
csguy

1
@csguy 덕분에 사라질 가능성이 적은 것으로 교체되었습니다
Michael Borgwardt

135

NoSQL과 같은 것은 없습니다!

NoSQL은 유행어입니다.

수십 년 동안 사람들이 데이터베이스에 대해 이야기 할 때 관계형 데이터베이스를 의미했습니다. 그리고 사람들이 관계형 데이터베이스에 대해 이야기 할 때 Edgar F. Codd의 Structured Query Language로 제어하는 ​​사람들을 의미했습니다. 다른 방법으로 데이터를 저장 하시겠습니까? 광기! 다른 것은 플랫 파일입니다.

그러나 지난 몇 년 동안 사람들은이 교리에 의문을 가지기 시작했습니다. 사람들은 행과 열이있는 테이블이 실제로 데이터를 나타내는 유일한 방법인지 궁금했습니다. 사람들은 사고와 코딩을 시작했고 데이터를 구성 할 수있는 많은 새로운 개념을 생각해 냈습니다. 그리고이 새로운 데이터 작업 방식을 위해 설계된 새로운 데이터베이스 시스템을 만들기 시작했습니다.

이 모든 데이터베이스의 철학은 달랐습니다. 그러나이 모든 데이터베이스가 공통적으로 갖는 한 가지는 구조적 쿼리 언어가 더 이상 데이터베이스를 사용하기에 적합하지 않다는 것입니다. 따라서 각 데이터베이스는 SQL을 자체 쿼리 언어로 대체했습니다. 따라서 NoSQL이라는 용어는 고전적인 관계형 데이터베이스 모델을 무시하는 모든 데이터베이스 기술의 레이블로 탄생했습니다.

그렇다면 NoSQL 데이터베이스의 공통점은 무엇입니까?

실제로는 많지 않습니다.

종종 다음과 같은 문구가 들립니다.

  • NoSQL은 확장 가능합니다!
  • NoSQL은 BigData를위한 것입니다!
  • NoSQL이 ACID를 위반합니다!
  • NoSQL은 영광스러운 키 / 값 저장소입니다!

그게 사실입니까? 글쎄, 이러한 문장 중 일부는 일반적으로 NoSQL이라고하는 일부 데이터베이스에 해당 될 수 있지만 모든 단일 데이터베이스는 다른 데이터베이스에 대해서도 모두 거짓입니다. 실제로 NoSQL 데이터베이스가 공통적으로 가지고있는 것은 SQL을 사용하지 않는 데이터베이스라는 것입니다. 그게 다야. 그것들을 정의하는 유일한 것은 그것들을 서로 구별시키는 것입니다.

그렇다면 NoSQL 데이터베이스는 어떻게 다른가요?

따라서 일반적으로 NoSQL이라고하는 모든 데이터베이스가 너무 다르므로 함께 평가할 수 없습니다. 특정 문제를 해결하기에 적합한 지 결정하기 위해 각각을 별도로 평가해야합니다. 그러나 우리는 어디에서 시작합니까? 고맙게도 NoSQL 데이터베이스는 특정 범주로 그룹화 할 수 있으며 이는 다른 사용 사례에 적합합니다.

문서 지향

예 : MongoDB, CouchDB

장점 : 이기종 데이터, 작업 객체 지향, 민첩한 개발

그들의 장점은 일관된 데이터 구조가 필요하지 않다는 것입니다. 요구 사항 및 데이터베이스 레이아웃이 지속적으로 변경되거나 함께 속해 있지만 여전히 다르게 보이는 데이터 세트를 처리 할 때 유용합니다. "key"와 "value"라는 두 개의 열이있는 테이블이 많으면 이것들을 살펴볼 가치가 있습니다.

그래프 데이터베이스

예 : Neo4j, GiraffeDB.

강점 : 데이터 마이닝

대부분의 NoSQL 데이터베이스는 데이터 관계 관리 개념을 포기하지만 이러한 데이터베이스는 소위 관계형 데이터베이스보다 훨씬 더 많은 데이터 관계를 수용합니다.

그들의 초점은 다른 데이터와의 관계로 데이터를 정의하는 것입니다. 다른 두 테이블의 기본 키인 기본 키가 포함 된 테이블이 많을 경우 (그리고 그 사이의 관계를 설명하는 일부 데이터)이 테이블이 적합 할 수 있습니다.

키-값 저장소

예 : Redis, Cassandra, MemcacheDB

장점 : 알려진 키로 빠른 값 조회

그것들은 매우 단순하지만 빠르고 사용하기 쉽습니다. 저장 프로 시저, 제약 조건, 트리거 및 모든 고급 데이터베이스 기능이 필요하지 않고 데이터를 빠르게 저장하고 검색하려는 경우 이러한 기능이 적합합니다.

불행히도 그들은 당신이 찾고있는 것을 정확히 알고 있다고 가정합니다. User157641의 프로필이 필요하십니까? 문제 없습니다. 마이크로 초 만 걸립니다. 그러나 16 세에서 24 세 사이의 모든 사용자의 이름을 원할 때 가장 좋아하는 음식으로 "와플"을 가지고 지난 24 시간 동안 로그인 한 경우는 무엇입니까? 힘든 행운. 특정 결과에 대해 명확하고 고유 한 키가 없으면 KV 스토어에서 쉽게 얻을 수 없습니다.

SQL이 더 이상 사용되지 않습니까?

일부 NoSQL 지지자들은 자신이 선호하는 NoSQL 데이터베이스가 새로운 방식의 일이며 SQL은 과거의 일이라고 주장합니다.

그들이 맞습니까?

물론 아닙니다. SQL이 적합하지 않은 문제가 있지만 여전히 강점을 가지고 있습니다. 많은 데이터 모델은 서로를 참조하는 테이블 모음으로 가장 잘 표현됩니다. 특히 대부분의 데이터베이스 프로그래머는 수십 년 동안 데이터를 관계형 방식으로 생각하도록 훈련을 받았으며이 사고 방식을 새로운 기술에 적용하려는 시도는 거의 이루어지지 않았습니다.

NoSQL 데이터베이스는 SQL을 대체하지 않으며 대안입니다.

다른 NoSQL 데이터베이스를 중심으로하는 대부분의 소프트웨어 에코 시스템은 아직 성숙하지 않았습니다. 발전된 기능이 있지만 널리 사용되는 SQL 데이터베이스에서 사용할 수있는 것만 큼 강력하고 강력한 추가 도구는 아직 없습니다.

또한 SQL에 대한 훨씬 더 많은 노하우가 있습니다. 여러 세대의 컴퓨터 과학자들이 관계형 데이터베이스에 중점을 둔 연구에 수십 년 동안 경력을 쌓아 왔으며 다음과 같은 내용을 보여줍니다. 실용적이든 이론적이든 SQL 데이터베이스 및 관계형 데이터 모델링에 대해 작성된 문헌은 여러 도서관에 많은 책을 채울 수있었습니다. 데이터에 대한 관계형 데이터베이스를 구축하는 방법은 잘 연구 된 주제이므로 일반적으로 일반적으로 인정되는 모범 사례가없는 모퉁이 사례를 찾기가 어렵습니다.

반면에 대부분의 NoSQL 데이터베이스는 아직 초기 단계입니다. 우리는 여전히 그것들을 사용하는 가장 좋은 방법을 알아 내고 있습니다.


NoSQL은 비 관계형 데이터베이스를 의미합니까? 그래프 데이터베이스도 NoSQL이고 관계형이기 때문에 아니오입니다. 옳은?
tomasb

1
@tomasb "관계형 데이터베이스"를 정의하는 방법에 따라 다릅니다. 그래프 데이터베이스에서 관계는 일반적으로 관계형이라고하는 데이터베이스보다 훨씬 중요합니다.
Philipp

"문제 없습니다. 마이크로 초 만 걸립니다." -psql과 같은 비 트랜잭션 읽기 성능을 얻을 수 없습니까?
Nakilon

2
좋은 답변은 Adam Piins "Philipp Ruins noSQL";-)을 제외하고는 거의 모든 것을 정확하게 표현한 것 같습니다.
JGlass

2
이것이 가장 좋은 대답이어야합니다.

28

누군가 내 이전 게시물이 주제를 벗어났다고 말했기 때문에, 나는 보상하려고 노력할 것입니다 :-) NoSQL은 더 많은 주류 SQL 데이터베이스를 대체하기위한 것이 아니며 결코 그렇지 않았습니다. 올바른 관점의 것들.

NoSQL 철학의 핵심은 아마도 상용 및 이식성 이유로 인해 SQL 엔진이 UNIX 운영 체제 및 그 파생 제품의 엄청난 힘을 무시하는 경향이 있다는 점입니다.

파일 시스템 기반 데이터베이스를 사용하면 무어의 법칙에 따라 수년 동안 꾸준히 증가하고있는 기본 운영 체제의 기능과 성능을 지속적으로 활용할 수 있습니다. 이 방법을 사용하면 많은 운영 체제 명령이 자동으로 "데이터베이스 연산자"가됩니다 ( "ls" "sort", "find"및 기타 수많은 UNIX 셸 유틸리티를 생각하십시오).

이를 염두에두고 약간의 창의력을 발휘하면 적어도 특정 SQL 패턴의 한계를 극복 할 수있는 파일 시스템 기반 데이터베이스를 고안 할 수 있습니다 .NoSQL의 철학의 핵심은 내가 그것을 보는 방법.

수백 개의 웹 사이트를 운영하고 있으며 모두 NoSQL을 어느 정도 사용합니다. 실제로 대량의 데이터를 호스팅하지는 않지만 일부 데이터를 처리하더라도 병목 현상을 극복하기 위해 NoSQL과 파일 시스템을 창의적으로 사용한다고 생각할 수 있습니다. 전통적인 SQL "jails"에서는 더 어려울 것입니다. 내가 의미하는 바를 이해하기 위해 "unix", "manis"및 "shaffer"를 Google에 촉구합니다.


9

올바르게 기억한다면 관계형을 따르지 않는 데이터베이스 유형을 말합니다. 문서 데이터베이스, 특정 구조가없고 특정 쿼리 언어로 SQL을 사용하지 않는 데이터베이스가 떠 오릅니다.

일반적으로 데이터베이스의 성능에 의존하는 웹 애플리케이션에 더 적합하며 Relation Database Engines의 고급 기능이 필요하지 않습니다. 예를 들어, ID 인터페이스로 간단한 쿼리를 제공하는 Key-> Value 저장소는 개발자 유지 관리 비용을 낮추면서 해당 SQL 서버 구현보다 10-100 배 더 빠를 수 있습니다.

한 가지 예는 단일 스레드 처리를위한 트랜잭션을 희생하고 (동시성이 허용되지 않으므로 동시성 문제가 없음) 모든 데이터를 메모리에 보관 하는 OLTP Tuple Store에 대한 이 백서 입니다 . 유사한 RDBMS 구동 시스템 과 비교하여 10-100 배 더 나은 성능을 달성 합니다. 기본적으로 SQL 및 데이터베이스 시스템의 'One Size Fits All'보기에서 멀어졌습니다.


1
NoSQL ( "this"로 표시됨)의 의미를 언급하는 첫 번째 링크가 종료 된 것 같습니다. 수정하십시오.
jobin

7

실제로 NoSQL은 키 기반 액세스 전략을 사용하여 큰 이진 개체 (문서, jpg 등)에 대한 빠른 액세스를 지원하는 데이터베이스 시스템입니다. 이것은 영숫자 값에 대해서만 충분한 전통적인 SQL 액세스에서 벗어난 것입니다. 내부 스토리지 및 액세스 전략뿐만 아니라 디스플레이 형식의 구문 및 제한으로 인해 기존 SQL이 제한됩니다. 전통적인 관계형 데이터베이스의 BLOB 구현에도 이러한 제한이 있습니다.

배후에서 SQL 모델이 모든 형태의 OLTP를 지원하지 않거나 새로운 데이터 형식을 지원하지 않는 것은 간접적으로 허용됩니다. "지원"이란 표준 모델을 사용하여 프로그래밍 방식으로 쿼리 방식으로 저장하는 것이 아니라 전체 액세스 기능을 의미합니다.

관계형 애호가라면 NoSQL을 Not-SQL에서 Not-Only-SQL로 빠르게 수정하여 SQL을 여전히 사진에 그대로 유지할 수있었습니다! 오늘날 대부분의 Java 프로그램이 기본 관계형 모델의 ORM 매핑에 의존한다는 것을 알 때 특히 좋지 않습니다. 새로운 개념에는 명확한 정의가 있어야합니다. 그렇지 않으면 SOA처럼 끝날 것입니다.

NoSQL 시스템의 기초는 임의의 키-값 쌍에 있습니다. 그러나 이것은 새로운 것이 아닙니다. IMS 및 IDMS와 같은 기존 데이터베이스 시스템은 인덱스를 사용하지 않고 해시 된 램덤 키를 지원했지만 여전히 사용합니다. 실제로 IDMS에는 NONSQL이라는 키워드가 있습니다. 여기서 NONSQL이라고하는 이전 네트워크 데이터베이스에 대한 SQL 액세스를 지원합니다.


5

자쿠지와 같습니다 : 브랜드와 일반적인 이름. Google의 BigTable 또는 CouchDB와 같은 대규모 (종종 스파 스) "데이터베이스"를 언급 하는 것은 특정 기술이 아니라 특정 유형 의 기술입니다.


5

NoSQL 실제 프로그램은 백엔드에서 플랫 파일을 사용하여 awk로 구현 된 관계형 데이터베이스 인 것으로 보입니다. "NoSQL은 본질적으로 임의의 제한이 없으며 다른 제품으로는 불가능한 곳에서 작동 할 수 있습니다. 예를 들어 데이터 필드 크기, 열 수 또는 파일 크기에는 제한이 없습니다."라고 생각하지 않습니다. 미래의 대규모 데이터베이스.

Joel이 말했듯이 BigTable 또는 HBase 와 같은 대규모 확장 가능 데이터베이스 는 훨씬 더 흥미 롭습니다. GQL은 BigTable 및 App Engine과 관련된 쿼리 언어입니다. Google이 병목 현상을 고려하는 기능 (예 : 조인)을 피하기 위해 SQL을 크게 조정했습니다. 그러나 이전에는 이것이 "NoSQL"이라고하는 것을들은 적이 없습니다.


5

NoSQL은 문자열 기반 SQL 쿼리를 사용하여 데이터를 가져 오지 않는 데이터베이스 시스템입니다.

대신 제공 할 API를 사용하여 쿼리를 작성합니다. 예를 들어 Amazon DynamoDB는 NoSQL 데이터베이스의 좋은 예입니다.

NoSQL 데이터베이스는 확장 성이 중요한 대규모 응용 프로그램에 적합합니다.


1

NoSQL은 비 관계형 데이터베이스를 의미합니까?

예, NoSQL은 RDBMS 및 OLAP과 다릅니다. 기존 관계형 데이터베이스보다 느슨한 일관성 모델을 사용합니다.

일관성 모델은 분산 공유 메모리 시스템 또는 분산 데이터 저장소와 같은 분산 시스템에서 사용됩니다.

내부적으로 어떻게 작동합니까?

NoSQL 데이터베이스 시스템은 종종 검색 및 추가 작업에 대해 고도로 최적화되어 있으며 종종 레코드 스토리지 (예 : 키-값 저장소) 이외의 기능을 거의 제공하지 않습니다. 전체 SQL 시스템에 비해 감소 된 런타임 유연성은 특정 데이터 모델의 확장 성과 성능이 크게 향상되어 보상됩니다.

구조적 및 비 구조적 데이터에서 작동 할 수 있습니다. 테이블 대신 컬렉션을 사용합니다.

이러한 "데이터베이스"를 어떻게 쿼리합니까?

시계 NoSQL에 대 SQL : 백엔드의 전투 ; 그것은 모든 것을 설명합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.