NoSQL이란 무엇이고, 어떻게 작동하며, 어떤 이점을 제공합니까?[닫은]

StackOverflow https://stackoverflow.com/questions/1145726

  •  16-09-2019
  •  | 
  •  

문제

나는 NoSQL에 대해 들었고, DB 상호 작용이 웹 속도에 병목 현상을 일으키는 경우가 많기 때문에 결국 NoSQL이 SQL DB 저장 방법을 대체하게 될 수도 있다는 이야기를 들었습니다.

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

  1. 정확히 무엇입니까?

  2. 어떻게 작동하나요?

  3. SQL 데이터베이스를 사용하는 것보다 나은 이유는 무엇입니까?그리고 얼마나 나아졌나요?

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

도움이 되었습니까?

해결책

  1. 정확히 무엇입니까?

    한편으로, a 특정 시스템, 그러나 그것은 또한 또한 일반적인 단어가되었습니다. 다양한 새로운 데이터 스토리지 백엔드 관계형 DB 모델을 따르지 않습니다.

  2. 어떻게 작동합니까?

    일반 이름으로 표시된 각 시스템은 다르게 작동하지만 기본 아이디어는 일반 RDBM의 모든 기능을 지원하지 않는 DB 모델을 사용하여 더 나은 확장 성과 성능을 제공하는 것입니다. 어떤면에서는 MySQL과 같으며 한 번에 거래에 대한 지원이 부족했지만 정확히 왜냐하면 그 중 다른 DB 시스템을 능가했습니다. 트랜잭션이 필요하지 않은 방식으로 앱을 쓸 수 있다면 훌륭했습니다.

  3. SQL 데이터베이스를 사용하는 것보다 더 나은 이유는 무엇입니까? 그리고 얼마나 더 나은가요?

    사이트를 대량으로 확장해야 할 때 가장 좋은 하드웨어에서 실행중인 최고의 RDBM이 가능한 한 최적화하고 최적화 할 수있는 최적의 RDBM이 단순히 부하를 따라 잡을 수 없을 때 더 좋습니다. 특정 사용 사례에 따라 얼마나 더 나은지 (많은 조인과 결합 된 많은 업데이트 활동은 "전통적인"RDBMS에서 매우 어렵습니다) 극한의 경우 1000의 한 계수 일 수 있습니다.

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

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

다른 팁

NoSQL 같은 것은 없습니다!

NoSQL은 유행어입니다.

수십 년 동안 사람들이 데이터베이스에 대해 이야기할 때는 관계형 데이터베이스를 의미했습니다.그리고 사람들이 관계형 데이터베이스에 관해 이야기할 때 그것은 Edgar F.로 제어하는 ​​데이터베이스를 의미했습니다.Codd의 구조적 쿼리 언어.다른 방법으로 데이터를 저장하시나요?광기!다른 것은 단지 플랫파일일 뿐입니다.

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

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

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

실제로는 많지 않습니다.

다음과 같은 말을 자주 듣습니다.

  • NoSQL은 확장 가능합니다!
  • NoSQL은 빅데이터를 위한 것입니다!
  • NoSQL은 ACID를 위반합니다!
  • NoSQL은 미화된 키/값 저장소입니다!

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

그렇다면 NoSQL 데이터베이스를 차별화하는 요소는 무엇일까요?

그래서 우리는 일반적으로 NoSQL이라고 불리는 모든 데이터베이스가 너무 다르기 때문에 함께 평가할 수 없다는 점을 분명히 했습니다.특정 문제를 해결하는 데 적합한지 결정하려면 각각을 개별적으로 평가해야 합니다.하지만 어디서부터 시작해야 할까요?다행히 NoSQL 데이터베이스는 다양한 사용 사례에 적합한 특정 범주로 그룹화될 수 있습니다.

문서 중심

예:몽고DB, 카우치DB

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

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

그래프 데이터베이스

예:Neo4j, 기린DB.

강점:데이터 수집

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

그들의 초점은 다른 데이터와의 관계를 통해 데이터를 정의하는 것입니다.다른 두 테이블의 기본 키인 기본 키(및 이들 사이의 관계를 설명하는 일부 데이터)가 있는 테이블이 많이 있는 경우 이는 도움이 될 수 있습니다.

키-값 저장소

예:레디스, 카산드라, MemcacheDB

강점:알려진 키로 값을 빠르게 조회

매우 단순하지만, 이로 인해 빠르고 사용하기 쉽습니다.저장 프로시저, 제약 조건, 트리거 및 모든 고급 데이터베이스 기능이 필요 없고 데이터의 빠른 저장 및 검색만 원하는 경우 이것이 적합합니다.

불행하게도 그들은 당신이 찾고 있는 것이 무엇인지 정확히 알고 있다고 가정합니다.User157641의 프로필이 필요합니까?문제 없습니다. 몇 마이크로초밖에 걸리지 않습니다.하지만 16~24세 사이이고, 좋아하는 음식이 "와플"이고 지난 24시간 동안 로그인한 모든 사용자의 이름을 알고 싶다면 어떻게 해야 할까요?행운을 빕니다.특정 결과에 대한 명확하고 고유한 키가 없으면 K-V 매장에서 쉽게 꺼낼 수 없습니다.

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

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

그 말이 맞나요?

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

NoSQL 데이터베이스는 SQL을 대체하는 것이 아니라 대안입니다.

다양한 NoSQL 데이터베이스를 중심으로 한 대부분의 소프트웨어 생태계는 아직 성숙하지 않았습니다.발전이 있기는 하지만 널리 사용되는 SQL 데이터베이스에 사용할 수 있는 도구만큼 성숙하고 강력한 보완 도구는 아직 없습니다.

또한, 주변에는 SQL에 대한 노하우가 훨씬 더 많습니다.여러 세대의 컴퓨터 과학자들은 관계형 데이터베이스에 초점을 맞춘 연구에 수십 년의 경력을 바쳤으며 이는 다음을 보여줍니다.SQL 데이터베이스와 관계형 데이터 모델링에 대해 실용적이고 이론적으로 작성된 문헌은 여러 도서관을 책으로 가득 채울 수 있습니다.데이터에 대한 관계형 데이터베이스를 구축하는 방법은 매우 잘 연구된 주제이므로 일반적으로 인정되는 모범 사례가 없는 코너 케이스를 찾기가 어렵습니다.

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

누군가 내 이전 게시물이 주제를 벗어 났다고 말했기 때문에 다음을 보상하려고 노력할 것입니다 :-) NOSQL은 더 많은 주류 SQL 데이터베이스를 대체하려는 것이 아니며 결코 얻지 못했지만 몇 가지 단어가 얻기위한 것입니다. 올바른 관점에서 사물.

의 핵심 NOSQL 철학 상업적 및 휴대 성 이유에 대해 SQL 엔진은 UNIX 운영 체제와 그 파생 상품의 엄청난 힘을 무시하는 경향이 있다는 고려 사항이 있습니다.

파일 시스템 기반 데이터베이스를 사용하면 Moore의 법칙에 따라 몇 년 동안 꾸준히 증가해온 기본 운영 체제의 지속적으로 증가하는 기능과 힘을 즉시 이용할 수 있습니다. 이 접근법을 사용하면 많은 운영 시스템 명령이 자동으로 "데이터베이스 연산자"( "LS" "정렬", "찾기"및 기타 수많은 UNIX 쉘 유틸리티를 생각합니다).

이를 염두에두고 약간의 창의성을 통해 실제로 NOSQL의 철학의 배후의 요점 인 특정 사용 패턴에 대해 많은 일반적인 SQL 엔진의 한계를 극복 할 수있는 파일 시스템 기반 데이터베이스를 실제로 고안 할 수 있습니다. 내가 그것을 보는 방식.

나는 수백 개의 웹 사이트를 실행하고 모두 NOSQL을 크게 사용합니다. 실제로, 그들은 엄청난 양의 데이터를 호스팅하지는 않지만, 그 중 일부는 병목 현상을 극복하기 위해 NOSQL과 파일 시스템을 창의적으로 사용하는 것을 생각할 수 있습니다. 전통적인 SQL "감옥"에서 더 어려울 수있는 것. "Unix", "Manis"및 "Shaffer"를 위해 Google에 제가 의미하는 바를 이해하도록 촉구합니다.

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

일반적으로 데이터베이스의 성능에 의존하고 관계 데이터베이스 엔진의 고급 기능이 필요하지 않은 웹 응용 프로그램에 더 적합합니다. 예를 들어, ID 인터페이스로 간단한 쿼리를 제공하는 키-> 값 저장소는 개발자 유지 보수 비용이 낮은 해당 SQL Server 구현보다 10-100 배 빠를 수 있습니다.

한 가지 예는 이것입니다 종이 용을 위해 OLTP 단일 스레드 처리에 대한 트랜잭션을 희생 한 튜플 스토어 (동시성 허용이 없기 때문에 동시성 문제 없음), 모든 데이터를 메모리에 유지합니다. 유사한 것에 비해 10-100 배 더 나은 성능을 달성합니다 RDBMS 구동 시스템. 기본적으로 SQL 및 데이터베이스 시스템의 '하나의 크기에 적합한'보기에서 멀어지고 있습니다.

실제로 NOSQL은 주요 기반 액세스 전략을 사용하여 대형 바이너리 객체 (DOCS, JPGS 등)에 대한 빠른 액세스를 지원하는 데이터베이스 시스템입니다. 이것은 영숫자 값에만 충분한 기존의 SQL 액세스에서 벗어난 것입니다. 내부 저장 및 액세스 전략뿐만 아니라 디스플레이 형식의 구문 및 제한은 기존 SQL을 제한합니다. 전통적인 관계형 데이터베이스의 Blob 구현도 이러한 제한을 겪습니다.

현장 뒤에는 SQL 모델의 실패가 모든 형태의 OLTP 또는 새로운 데이터 포름에 대한 지원에 대한 간접적 인 입학입니다. "지원"은 저장뿐만 아니라 전체 액세스 기능 - 표준 모델을 사용하여 프로그래밍 방식 및 쿼리를 의미합니다.

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

NOSQL 시스템의 기초는 랜덤 키 값 쌍에 있습니다. 그러나 이것은 새로운 것이 아닙니다. IMS 및 IDM과 같은 기존 데이터베이스 시스템은 해시 램 돔 키 (색인을 사용하지 않고)를 지원했지만 여전히 그렇습니다. 실제로 IDMS에는 이미 NONSQL이라고하는 이전 네트워크 데이터베이스에 대한 SQL 액세스를 지원하는 키워드 NONSQL이 있습니다.

자쿠지와 같습니다. 브랜드와 일반적인 이름입니다. 그것은 단순한 기술 일뿐 만 아니라 오히려 구체적입니다. 유형 이 경우 Google의 Bigtable 또는 CouchDB와 같은 대규모 (종종 드문) "데이터베이스"를 언급합니다.

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

Joel이 말했듯이, 대규모 확장 가능한 데이터베이스와 마찬가지로 bigtable 또는 HBASE, 훨씬 더 흥미 롭습니다. GQL은 Bigtable 및 App Engine과 관련된 쿼리 언어입니다. Google 기능을 피하기 위해 SQL 조정이 크게 조정되었습니다. 그러나 나는 이것을 전에 "NOSQL"이라고 불렀다.

NOSQL은 데이터를 가져 오기 위해 String 기반 SQL 쿼리를 사용하지 않는 데이터베이스 시스템입니다.

대신 Amazon DynamoDB와 같은 API를 사용하여 쿼리를 구축합니다. 예를 들어 Amazon DynamoDB는 NOSQL 데이터베이스의 좋은 예입니다.

NOSQL 데이터베이스는 확장 성이 중요한 대규모 응용 프로그램에 더 좋습니다.

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

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

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

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

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

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

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

보다 SQL vs NOSQL : 백엔드 전투; 그것은 모든 것을 설명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top