메인 콘텐츠로 건너뛰기
블로그 데이터베이스 SQL이 충분하지 않을 때

SQL이 충분하지 않을 때

SQL이 충분하지 않은 경우

SQL을 사용하는 RBDMS(관계형 데이터베이스 관리 시스템)는 수십 년 동안 애플리케이션 정보를 저장하는 데 사용되어 왔습니다. 의료 및 금융과 같은 주요 산업의 중추 역할을 하는 관계형 모델은 각 행에 대한 식별 키가 있는 테이블로 데이터를 구성하는 관계형 모델이 안정적이고 효율적인 것으로 입증되었습니다. MySQLPostgreSQL을 포함한 최신 SQL 데이터베이스는 오늘날 가장 많이 사용되는 데이터베이스 중 일부로 남아 있습니다. 그러나 SQL이 충분하지 않은 경우는 언제입니까?

2000 년대 후반부터 시작된 NoSQL (NotOnlySQL) 데이터베이스의 부상은 다른 많은 발전과 일치했습니다. 멀티코어 프로세서와 가상화가 보편화되는 동안 클라우드가 도약하고 전 세계 수백만 명의 사용자가 스마트폰으로 처음으로 온라인에 접속했습니다. 성장에 필요한 모든 것, 그리고 이렇게 필요한 규모를 달성하는 가장 실용적인 방법은 수평 확장입니다. 우리는 종종 SQL 대 NoSQL이 "SQL은 수직으로 확장 할 수 있고 NoSQL은 수평으로 확장 할 수 있습니다"로 지나치게 단순화되는 것을 보지만 이는 불완전하고 올바르지 않습니다.

수평 스케일링

수평적 확장에 대해 이야기할 때 더 많은 노드나 머신을 추가하여 환경을 확장하는 것을 의미합니다. SQL 데이터베이스는 단일 노드에 RAM과 컴퓨팅을 추가하여 비교적 쉽게 수직으로 확장할 수 있지만 데이터 세트를 여러 노드에 분산하는 것은 더 어렵습니다. 이 작업은 샤딩이라는 기술을 통해 수행할 수 있습니다. 대규모 데이터 집합 및 높은 처리량으로 작업할 때 분할은 단일 서버의 부하를 줄이는 데 도움이 되며 필요에 따라 서버를 추가하거나 제거하여 크기를 조정할 수 있습니다.

MySQL 샤딩 및 제한 사항

SQL 데이터베이스는 분할을 통해 수평으로 확장할 수 있습니다. 방법 및 지원되는 기능은 데이터베이스마다 크게 다르지만 주의 사항을 고려해야 합니다. 보다 일반적인 예 중 하나 인 NDB 스토리지 엔진을 사용하는 MySQL에 초점을 맞추겠습니다. MySQL은 하나의 큰 테이블을 여러 개의 작은 테이블로 분할할 수 있는 NDB 클러스터를 지원합니다. 테이블을 분할하는 프로세스를 분할이라고 합니다. 여러 서버에 저장되는 경우 이러한 작은 테이블이 분할된 데이터베이스를 구성합니다. 클러스터의 데이터베이스는 각각 샤드 중 하나를 저장합니다. 클러스터의 데이터베이스가 함께 전체 데이터 집합을 구성합니다. 

SQL 데이터베이스에서 분할을 사용하면 데이터 세트 크기를 매우 크게 확장할 수 있지만 애플리케이션 논리가 더 복잡해질 수도 있습니다. 데이터가 여러 분할된 데이터베이스로 분할되는 방식을 신중하게 구성해야 하는데, 이 결정은 전체 데이터베이스 성능에 영향을 미치기 때문입니다.  복잡성과 높은 시간 요구 사항 외에도 고려해야 할 기술적 장애물이 있습니다. 일반적으로 명시된 제한 사항에 대응하기 위해 MySQL은 여러 샤드에서 조인 작업을 수행하도록 구성할 수 있지만 더 큰 규모에서는 성능이 저하됩니다. 이로 인해 이러한 환경에서 분석 기능이 실용적이지 않을 수 있습니다.

엔터 버튼 NoSQL

다양한 유형의 NoSQL 데이터베이스가 2000년대 후반에 시작된 이후 폭발적으로 증가했습니다. 이 예제에서는 가장 인기 있는 NoSQL 데이터베이스인 MongoDB에 중점을 둘 것입니다. MongoDB ( '거대한'이라는 단어에서 파생 됨)는 문서 지향적입니다. 데이터는 JSON 객체와 유사한 문서에 저장되며 각 문서에는 필드와 값 쌍이 포함됩니다. 이는 테이블과 행을 사용하여 데이터 서식을 지정하는 SQL 데이터베이스와 반대입니다. MongoDB와 같은 NoSQL 데이터베이스가 일반적으로 수평 확장에 더 적합하다는 것을 읽었을 수도 있지만 그 이유를 살펴 보겠습니다.

MongoDB는 특히 JSON에서 파생 된 BSON이라는 형식을 사용하지만 각 데이터베이스마다 다릅니다.

스키마 및 분할된 데이터베이스

MongoDB는 스키마 가 없거나 스키마 가 없으므로 데이터베이스 수준에서 정의 된 조직 구조가 필요하지 않습니다. 대신 스키마는 응용 프로그램 수준에서 코드에 내장되어 있으므로 데이터를 보존하면서 나중에 구조를 변경할 수있는 많은 유연성을 제공합니다. ACID 호환 SQL 데이터베이스의 엄격하게 적용되는 일관성이 부족하지만 MongoDB 및 기타 NoSQL 데이터베이스는 가용성 및 파티션 허용 오차에서 탁월합니다.

SQL 데이터베이스를 수평으로 확장하는 방법을 살펴보면 테이블을 분할된 데이터베이스로 분할하는 프로세스를 살펴보았습니다. 가능하지만 데이터베이스에 내장 된 엄격한 구조로 인해 많은 제한이 있습니다. 반면 MongoDB 및 기타 NoSQL 데이터베이스는 구조적 수준에서 샤딩을 수용하도록 설계되었습니다. 샤드는 데이터의 하위 집합이며 MongoDB를 사용하면 샤드를 복제본 세트로 배포하여 수평적으로 확장할 수 있습니다. 복제본 세트 는 동일한 데이터의 중복 복사본이 있는 세 개 이상의 노드로 구성된 클러스터입니다. 대규모 환경에 분산될 때 가용성과 중복성을 제공하며 미리 결정된 체계에 의해 제한되지 않습니다.

이를 통해 NoSQL 데이터베이스가 확장 가능한 양보를 즉시 확인할 수 있습니다. NoSQL 데이터베이스는 대규모 수평 배포에서 가용성을 달성하는 데 필요한 중복 데이터의 양으로 인해 SQL 데이터베이스보다 훨씬 더 많은 스토리지를 사용하는 경우가 많습니다. NoSQL 쓰기 속도는 SQL 데이터베이스보다 성능이 뛰어나지만 쿼리는 더 느립니다. 정의된 구조가 없는 NoSQL 데이터베이스는 본질적으로 ACID를 준수하지 않으므로 대량의 금융 트랜잭션을 처리하는 애플리케이션에 덜 실용적입니다. 또는 성능을 유지하는 대규모 분산 NoSQL 클러스터를 구성하여 빅 데이터 및 분석에 이상적인 후보로 만들 수 있습니다. 

그렇다면 SQL로는 충분하지 않은 경우는 언제입니까? 예상대로 대답은 간단하지 않지만 응용 프로그램을 설계 할 때 고려할 수있는 몇 가지 일반적인 지침이 있습니다. 우리 앱은 무엇을해야하며 얼마나 커야합니까? 거기에서 우리는 최우선 순위를 결정할 수 있습니다. "SQL은 수직으로 확장되고 NoSQL은 수평으로 확장됩니다"라고 말하는 것은 사실이 아니지만 "대부분의 SQL 데이터베이스는 일관성을 염두에두고 설계되었지만 대부분의 NoSQL 데이터베이스는 확장을 수용하도록 설계되었습니다"라고 말할 수 있습니다.  

그 일반적인 지침에 대한 대위법이 항상있을 것입니다. MySQL을 수평으로 확장 할 수 있으며 MongoDB는 다중 문서 ACID 트랜잭션을 지원하기 시작했습니다. 이러한 데이터베이스가 어떻게 설계되는지 더 많이 이해할수록 작업에 가장 적합한 도구를 선택할 수 있는 통찰력을 얻을 수 있습니다.

Linode에 데이터베이스 배포

Linode 관리형 데이터베이스에 대해 자세히 알아보거나 선호하는 데이터베이스 엔진에 대한 업데이트를 받으려면 가입 하세요. 또한 Linode Marketplace 에서 MongoDB와 같은 데이터베이스 관리형 시스템을 배포하거나 CentOS 7에 MongoDB 설치하기와 같이 다양한 Linux 배포판에 데이터베이스를 설치하는 가이드를 따를 수도 있습니다.


내용

댓글 남기기

이메일 주소는 게시되지 않습니다. 필수 필드가 표시됩니다 *