이 게시물에서는 Couchbase의 시스템 카탈로그를 소개하고 SQL Server와 비교한 구체적인 사용 사례를 살펴봅니다.

저처럼 20년 동안 SQL Server를 사용하다 보면 성가신 점을 발견하는 경향이 있습니다. 멋진 해결 방법을 만들지만, 직장을 옮기고 해결 방법을 찾지 못하면 같은 문제가 반복해서 발생합니다. 저도 SQL Server의 시스템 카탈로그 보기와 관련된 성가신 문제로 비슷한 경험을 한 적이 있습니다. 여기서는 Couchbase를 사용하면 이 문제가 얼마나 간단해질 수 있는지 보여드리겠습니다.

시스템 카탈로그 보기

시스템 카탈로그는 데이터베이스에 저장된 개체에 대한 시스템 수준의 메타데이터를 표시하는 내부 테이블 및 보기입니다.

SQL Server에서는 트랜잭트-SQL(T-SQL)을 사용하여 시스템 카탈로그 보기 및 동적 관리 개체(DMO)*에 액세스하여 이 내부 데이터를 살펴볼 수 있습니다. 

호출할 수 있는 다른 함수와 기능도 있지만 대부분의 사용자는 구문이 더 쉽고 참조 자료가 많기 때문에 이 두 가지를 고수합니다.

아래에서 살펴볼 것처럼 Microsoft에서 SQL Server 시스템 카탈로그 보기의 범위를 데이터베이스별로 설정하는 경우가 있기 때문에 항상 짜증이 났습니다. 어떤 사람들은 이것이 좋은 접근 방식이라고 생각하지만, 범위가 한 번에 하나의 데이터베이스로 제한되기 때문에 여러 관련 데이터베이스에서 결과를 비교하기가 더 어려워질 수 있습니다.

* (동적 관리 뷰(DMV)라고 부르는 데 익숙하다면 함수에 대한 DMF도 있다는 것을 기억하세요. DMO가 일반적인 용어입니다.)

카우치베이스와 SQL Server 용어 비교

더 알아보기 전에 SQL Server와 Couchbase의 몇 가지 기본 데이터베이스 개념의 주요 용어를 비교해 보겠습니다. Couchbase는 JSON용 SQL 쿼리 언어를 사용하는 NoSQL 데이터베이스이므로 SQL Server와 일부 겹치는 부분도 있지만 몇 가지 변형된 부분도 있습니다. 이 표에서는 두 시스템의 주요 용어에 대해 설명합니다.

SQL Server 카우치베이스 참고
클러스터 클러스터 SQL Server의 클러스터는 각 인스턴스가 하나의 노드에서만 활성화되는 고가용성을 위한 것입니다. Couchbase는 분산 아키텍처의 이점을 활용하며, 그렇게 구성된 경우 각 노드에 활성 데이터가 포함될 수 있습니다.
인스턴스 클러스터/노드 SQL Server 엔진의 설치는 인스턴스로 분류됩니다. 동일한 컴퓨터에 둘 이상의 인스턴스가 있을 수 있습니다. Couchbase는 각 노드에 여러 유형의 서비스를 포함할 수 있는 별도의 노드 개념을 적용합니다. DBA는 여러 노드에 서비스를 분산시킬 수도 있습니다. 우리는 이러한 다차원 확장을 Couchbase의 핵심적이고 강력한 기능이라고 부릅니다.

SQL Server 인스턴스는 잠재적으로 여러 노드를 포함하는 Couchbase 클러스터와 비교할 수 있습니다.

데이터베이스 버킷
스키마 범위
컬렉션
기록/행 문서

시스템 카탈로그를 사용하여 인덱스 분석

특정 사용 사례에서는 모든 데이터베이스의 인덱스 목록을 가져와서 누락된 인덱스가 있는지 비교하고 확인하고자 합니다. B2B 제공업체로서 동일한 인스턴스에서 많은 고객을 호스팅하는 경우 이 질문이 자주 발생합니다. 종종 각 고객은 별도의 데이터베이스를 가지고 있으며 동일한 스키마와 인덱스 집합을 적용합니다.

다음 의사 코드는 한 가지 해결 방법을 설명합니다. 여기서는 문제를 해결하기 위한 것이 아니라 비슷한 결과를 얻기 위해 SQL Server가 얼마나 더 많은 노력이 필요한지 보여주기 위한 것입니다. Couchbase 카탈로그는 클러스터 수준으로 범위가 지정되므로 클러스터의 여러 버킷을 쉽게 비교할 수 있습니다.

여기서는 SQL Server의 내장 함수를 사용하여 데이터베이스를 반복하지 않는데, 이는 약간 버그가 있었기 때문입니다. Aaron Bertrand가 훨씬 더 나은 버전을 작성했으며, 다음 링크에서 찾을 수 있습니다. MSSQLTips.

SQL Server용 의사 코드:

  1. 데이터를 저장할 임시 테이블 만들기
  2. 사용자 데이터베이스 수에 따라 루프/커서 시작하기
  3. 동적 문자열을 생성하여 해당 데이터베이스의 범위를 입력하고, 인덱스 카탈로그 또는 DMO에서 DB 이름과 함께 데이터를 선택하고, 테이블에 데이터를 삽입합니다.
  4. 동적 문자열 실행
  5. 다음 데이터베이스
  6. 그런 다음 쿼리를 입력합니다(아래의 혀를 뺨에 대는 예시):

카우치베이스용 N1QL 쿼리:

이와는 대조적으로, 카탈로그가 데이터베이스 수준이 아닌 클러스터 수준에 있기 때문에 Couchbase에서 동일한 작업을 수행하는 것은 간단합니다. 여기서는 단일 쿼리만 실행하면 됩니다. 이 시나리오에서는 Couchbase 7을 사용하며 기본 범위가 사용되지 않습니다. (Couchbase의 범위는 SQL Server의 스키마와 유사합니다.) 

이 쿼리는 시스템 카탈로그를 사용하여 활성 인덱스에 액세스합니다:

쿼리를 보면 TSQL과 유사하다는 것을 즉시 알 수 있습니다. Couchbase는 SQL-for-JSON 언어인 N1QL을 만드는 데 많은 노력을 기울였기 때문에 SQL에 익숙한 사람이라면 누구나 N1QL을 거의 즉시 익힐 수 있습니다. 

위의 내용을 테스트하기 위해 하나의 범위와 하나의 컬렉션으로 3개의 버킷을 만들었습니다. 일부 데이터를 삽입하고 몇 가지 인덱스를 만들었습니다. 작업을 더 쉽게 하기 위해 WHERE 절에 하드코딩된 숫자를 넣었지만, 다른 카탈로그를 참조하여 비교하려는 버킷, 범위 또는 컬렉션의 수를 합산할 수도 있었습니다.

물론 인덱스만이 우리가 확인할 수 있는 유일한 개체는 아닙니다. Couchbase 시스템 카탈로그는 클러스터의 모든 개체에 액세스할 수 있기 때문에 SQL Server에서처럼 루프를 만들지 않고도 범위(스키마) 및 컬렉션(테이블)으로도 동일한 작업을 수행할 수 있습니다.

다음 단계

보시다시피 Couchbase에서 데이터베이스 개체에 대한 액세스를 간소화하면 매우 편리할 수 있습니다. 데이터베이스 메타데이터에 액세스하는 것은 모든 DBA에게 중요하며 최소한의 코딩으로 쉽게 수행할 수 있습니다. 이 방법을 사용해 보시고 이 접근 방식을 통해 Couchbase에서 얼마나 빨리 시작하고 실행할 수 있는지 확인해 보시기 바랍니다.

  • 카우치베이스가 처음이신가요? 호스팅 버전을 사용해 보세요. 여기 30일 무료 평가판을 사용해 보세요. 5분 이내에 클러스터를 실행할 수 있습니다!
  • 자세히 알아보기 Couchbase 7 릴리스 및 새로운 기능
  • 자세히 알아보기 범위 및 컬렉션
  • Couchbase 카탈로그 보기 목록은 다음과 같습니다. 여기

작성자

게시자 리차드 더글러스 - 솔루션 엔지니어

댓글 남기기