NoSQL이 SQL보다 빠른 이유는 무엇입니까?


48

최근에 나는 물었다 :

NoSQL이 SQL보다 빠른 이유는 무엇입니까?

나는 그 질문의 전제에 동의하지 않았다 ... 그것은 개인적으로 나에게 넌센스입니다. SQL 대신 NoSQL을 사용하여 성능 향상을 볼 수 없습니다. 아마도 NoSQL을 통한 SQL 일 것입니다.

NoSQL에 대해 뭔가 빠졌습니까?


3
성능 향상을 볼 수 없다면 그것이 바로 그런 말입니다. 사실 대부분의 NoSQL 솔루션은 관계형 데이터베이스의 ACID 속성 중 하나 이상을 포기하므로 ​​그 수가 적습니다.
Oded

1
기존 ACID 사용 관계형 데이터베이스에 쉽게 매핑 할 수없는 워크 플로 (및 데이터 구조)가 있습니다. 사람들을 위해, 당신이 볼 수있는 거대한 되는 NoSQL 데이터베이스를 사용하여 성능 향상을. 그러나, 당신은 단순히 기존의 (잘 설계) SQL DB를 취하고되는 NoSQL 데이터베이스에 넣어 경우, 성능이됩니다 반드시 고통.
Joachim Sauer

1
답은 : 더 빨리 설립 되었습니까? 그리고 무엇보다 빠릅니까? 개발 시간? 시간을 읽습니까? 시간을 쓰시겠습니까? 어떤 유형의 쓰기? 우리는 그것을 무엇과 비교합니까? 다중 테이블 쿼리? 조인?
Rolf

답변:


65

주변에는 NoSQL 솔루션이 많이 있으며 각 솔루션마다 고유 한 강점과 약점이 있으므로 다음과 같은 소금을 사용해야합니다.

그러나 기본적으로 많은 NoSQL 데이터베이스는 비정규 화에 의존하고 비정규 화 된 사례를 최적화하려고합니다. 예를 들어, 문서 중심 데이터베이스에서 주석과 함께 블로그 게시물을 읽고 있다고 가정합니다. 종종 댓글은 게시물 자체와 함께 저장됩니다. 즉, 동일한 위치에 저장되며 조인을 수행 할 필요가 없으므로 모두 함께 검색하는 것이 더 빠릅니다.

물론 SQL에서도 동일한 작업을 수행 할 수 있으며 비정규 화는 성능이 필요한 경우 일반적인 관행입니다. 많은 NoSQL 솔루션이 처음부터 항상 이런 식으로 사용되도록 설계되었습니다. 그런 다음 일반적인 상충 관계를 얻습니다. 예를 들어, 위의 예제에 주석을 추가하면 전체 문서를 저장해야하기 때문에 속도가 느려집니다. 그리고 비정규 화되면 응용 프로그램에서 데이터 무결성을 유지해야합니다.

또한 많은 NoSQL 솔루션에서는 임의 조인을 수행 할 수 없으므로 임의 쿼리가 불가능합니다. CouchDB와 같은 일부 데이터베이스는 필요한 쿼리를 미리 생각하고 DB 내부에서 준비해야합니다.

대체로, 비정규 화 된 스키마를 예상하고 해당 상황에 대한 읽기를 최적화하는 것으로 요약되며, 이는 관계 성이 높지 않고 쓰기보다 훨씬 더 많은 읽기가 필요한 데이터에 적합합니다.


4
그런데 이것은 간단한 구체화 된 뷰 또는 캐시 계층을 통해 실현 될 수 있지만 여전히 모든 SQL 장점을 활용할 수 있습니다. 적절하게 모델링 된 것은 관계형이며 논리적 데이터 복제는 해결책이 아닙니다 (매트보기는 중복이지만 논리적 복제는 아닙니다. 단순히 다른 이미지 일 뿐이므로).
Morg.

대답에서 말했듯이 SQL에서 동일한 작업을 수행 할 수 있습니다. 이것이 예외가 아닌 규칙이 될 때 NoSQL 데이터베이스는 일반적으로 더 빠르고 자연스럽게 사용됩니다. 이론적으로 SQL은 사용할 수있는 최상의 모델이지만 데이터가 특정 크기 이상으로 증가하면 일부 모델을 수용 할 수 없으며 데이터 복제가 더 빠르고 추론하기 쉬워집니다.
Andrea

3
황소 야 관계형 모델은 NoSQL 등으로 만들 수있는 모든 것을 다룹니다. NoSQL의 유일한 장점은 확장에 대한 단순하고 일관성없는 접근 방식이 내장되어 있고 사용하기 쉽다는 것입니다. SQL과는 아무런 관련이 없으며 ACID 속성을 신경 쓰지 않는 것과 관련이 있습니다. 독립적 인 SQL 노드간에 동기화 작업을 수행 할 수 있으며 이는 NoSQL 스토어와 정확히 동일한 (매우 나쁜) 스케일링 및 일관성 속성을 갖습니다. 차이점은 SQL 노드는 원하는 경우 일관성을 유지할 수 있다는 것입니다.
Morg.

1
5,000,000 만 개의 데이터 행이 있고 어떤 조건으로 모든 데이터에서 주석을 얻으려면 어떻게해야합니까? SQL을 사용하여 테이블의 주석 필드에 색인이 있으면 더 빠르지 않습니까? 전체 텍스트 인덱싱은이를 더욱 향상시킵니다.
jwize

@morg- "관계형 모델은 NoSQL 등으로 만들 수있는 모든 것을 다룹니다." 아니, 아니 관계형 모델에 적합하지 않은 데이터 유형에 대한 많은 예가 있는데, 이로 인해 데이터를 강제로 저장하면 비 효율성이 커집니다. 예 : 온라인 게임에는 플레이어 인벤토리를 저장하는 기능이 있습니다. 플레이어는 제한된 숫자의 슬롯 세트를 가지고 있으며, 각 슬롯에는 특정 유형의 하나 이상의 항목을 저장할 수 있습니다. 약 50 가지의 다른 종류의 아이템이 있으며, 각각은 4-6 개의 연관된 속성을 가지고 있으며, 일부는 겹치므로 약 80 개의 가능한 속성이 있습니다.
Jules

27

NoSQL에 대해 누락 된 것은 NoSQl을 SQL과 비교할 수 없다는 것입니다. NoSQL은 SQL이 아닌 모든 지속성 기술의 이름입니다. 문서 DB, 키-값 DB, 이벤트 DB는 모두 NoSQL입니다. 저장된 데이터 구조, 쿼리, 성능 및 사용 가능한 도구 등 거의 모든 측면에서 서로 다릅니다.

따라서 누군가 인터뷰에서 그러한 질문을하면 이것이 정답입니다.


4
NoSQL의 킬러 기능이 하나라면 확장 성이라고 말할 수 있습니다. 그렇기 때문에 페이스 북과 구글이 그것을 사용합니다. 엄청난 양의 데이터로 인해 NoSQL : 엄청난 양의 데이터를 처리해야 할 때.
Pieter B

16

'NoSQL'(또는보다 정확하게는 비 관계형) 데이터베이스는 전통적인 데이터베이스의 일부 기능을 속도로 제공하지만 수평 확장성에는 더 중요합니다.

누락 된 기능은 콘크리트 제품에 따라 다르며 일반적으로 전체 ACID 속성 또는 결합 작업은 지원되지 않습니다. 이것이 성능 향상을위한 가격입니다.


1
비 관계형으로 NoSQL을 설명하는 것은 더 정확하지 않습니다. NoSQL 범주에 속하지 않는 다른 오래된 비 관계형 DB가 있습니다. NoSQL은 비 관계형 이상의 의미를 갖습니다. 추가 정보를 위해 이것을 읽으십시오 : martinfowler.com/bliki/NosqlDefinition.html
eddyP23

8

당신은 옳습니다. 담요 진술에 진술하는 것은 말도 안됩니다. 아마도 요점 일 것입니다. 면접관은 단일 답변 대신 문제의 상황이 무엇인지 (어떤 종류의 데이터, 얼마나 많은 양, 운영 환경 등) 특정 NoSQL 솔루션을 파악하는 데 도움이되는 질문에 답할 것을 기대합니다. . 그들은 당신이 문제를 분석하는 방법을 찾고 그 방법에 따라 다른 솔루션에 대해 얼마나 많이 알고 있는지 알아낼 것입니다.


예, 그것은 포괄적 인 진술이며, 우리가 그것을 사실로 받아들이면 질문에 대한 대답은 다음과 같습니다.
Rolf

5

NoSQL 데이터베이스는 일반적으로 데이터베이스를 중심으로 데이터를 디자인하는 경우에만 의미가 있습니다.

단순히 RDBMS 대체로 사용하려는 경우, 특히 많은 양의 RAM이있는 서버에 대해 지불 할 예산이 충분하지 않은 경우 성능이 저하 될 수 있습니다.

MySQL 디스크 공간 사용량과 MongoDB의 사용량을 비교하는이 기사를 참조하십시오. http://blog.trackerbird.com/content/mysql-vs-mongodb-disk-space-usage


3

어떤 NoSQL 데이터베이스입니까? 어떤 SQL 데이터베이스? 누군가 NoSQL이 SQL보다 빠르다고 말하면 멀리 가야합니다. 또는이 비디오를 시청하는 것이 좋습니다.

http://www.youtube.com/watch?v=b2F-DItXtZs

나는 NoSQL에 대해 주장하는 것의 절반이 잘못되었다고 말하지는 않을 것입니다. 그러나 나는 그것을 잘 이해하지 못하는 사람들로부터 NoSQL fanboyism이 많이 있다고 말할 것입니다.

SQL에는 물론 한계가 있지만 매우 성숙한 기술이기 때문에 잘 이해하고 있으며 사용법을 잘 알고있는 많은 개발자 풀이 있습니다. 모든 형태의 NoSQL에 대해 똑같이 말할 수는 없습니다.


-2

RDBMS가 행 지향 데이터베이스 인 열 지향 데이터베이스에서 NoSql을 지원합니다. 예를 들어 이름, 연령, 판매소, 주소, EmployeeId 등이있는 Employee 테이블이 있습니다. MySql (RDBMS 지원) ​​및 HBase에 동일한 테이블을 넣습니다. (NoSQL 지원). 고객 / 고객이 1Lakh 직원 레코드에서 평균 연령 또는 판매소 세부 정보를 얻기 위해 쿼리를 작성하면 어떻게됩니까?

RDBMS에서는 각 행을 돌아 다니면서 결과에 대한 값과 합계 및 나누기를 수집합니다. Columnar 데이터베이스와 관련하여 하나의 모든 행 반복에 대해 걱정할 필요가 없습니다. 그러나 계산 속도가 더 빠른 하나의 행만 처리하십시오. 따라서이 방법은 때때로 NoSQL이 SQL보다 빠릅니다. 이 경우 NoSQL은 ACID 불만에 대해 신경 쓰지 않습니다.


2
형식을 약간 수정했지만 두 가지 사이에 무엇을 얻으려고하는지 확실하지 않습니다. ACID는 RDBMS에서도 항상 지원되는 것은 아닙니다.

-3

데이터베이스에 대한 이론을 잊어 버리십시오 .. 일단 쿼리를 이해하면 포인트는 실제로 응용 프로그램에서 실제로 사용되는 방식으로 nosql 데이터베이스에 데이터를 저장할 수 있습니다.

예를 들어,이 예를 살펴보면 u는 주문이 많고 각 주문과 관련된 많은 항목이있는 고객 모델이 있고 나중에 구매할 때도 많은 저장 항목이있는 경우가 있습니다. 백만 주문. 그리고 고객은 대시 보드에 로그인하여이 정확한 데이터를 표시합니다. SQL 데이터베이스는 고객을 찾고 주문과 각 광고 항목 및 저장된 항목에 참여하는 데 얼마나 많은 작업을 수행해야하는지 보여줍니다. SQL 데이터베이스 에서이 모든 데이터는 어떤 방식으로 결합되어야 할 것입니다 ... 또는 u는 usercache라는 ur 데이터베이스에 컬렉션을 생성 하고이 데이터를 실제로 사용하는 방식으로 정확하게 저장할 수 있습니다. 따라서이 모든 데이터를 다시 가져 오기 위해 단일 필드 [id]에 대한 단일 쿼리 일 수 있습니다. 게다가 nosql 데이터베이스는

그렇다면 SQL DB는 nosql보다 빠르지 않은 한 단일 ID 필드를 빨리 쿼리 할 수 ​​있습니까? 예. 그러나 SQL 데이터베이스는 하나의 테이블과 하나의 필드를 쿼리하여 필요한 모든 데이터를 반환 할 수 있습니까? 아니요, Json의 데이터를 큰 텍스트 필드 안에 저장하는 것과 같은 작업을 수행하지 않는 한. 그러나 이제는 향후 사용을 위해 데이터를 쿼리 할 수 ​​없습니다.

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