Couchbase 기본 사용법

Couchbase의 기본적인 사용법에 대해서 알아봅시다.

written by tiaz0128

문서 기반의 NoSQL 데이테베이스 중에서 Couchbase를 사용하는 방법에 대해서 알아보겠습니다.

Couchbase


Couchbase

Couchbase는 기본적으로 key-value 형태로 JSON과 같은 문서를 저장할 수 있습니다. 간략한 특징은 아래와 같습니다.

설치


Couchbase 설치를 보고 따라서 설치를 진행합니다. 도커를 이용하면 간단하게 로컬에서 Couchbase 서버를 동작시킬 수 있습니다. 운영체제에 따라서 직접 설치 또한 가능합니다.

$ docker run -t --name db -p 8091-8096:8091-8096 -p 11210-11211:11210-11211 couchbase/server:enterprise-7.2.0

Web Console


1. 관리자 계정 생성및 세팅

Web Console(http://localhost:8091)을 이용하여 관리자 계정및 비밀번호를 세팅합니다. 다음으로 Disk, Memory, Services등을 설정 가능합니다.

Setup New Cluster

2. 샘플 데이터 세팅

왼쪽 Buckets 탭에 들어가면 아무런 데이터가 없기 때문에 샘플 데이터를 세팅할 수 있습니다. 버킷은 문서를 저장하는 공간 입니다. 각 버킷 마다 메모리, Replicas 등을 설정 할 수 있습니다.

샘플 데이터 세팅

SDK 개발


개발에 사용할 수 있는 여러가지 SDK를 제공하고 있습니다. 여기서는 python을 이용하여 Couchbase로 개발하는 방법을 알아보겠습니다. pip를 통해 SDK를 간단히 설치할 수 있습니다.

$ pip install couchbase

Couchbase 접속

Couchbase에 접속하기 위한 인증 객체를 생성하고 cluster가 준비되는 대기 시간을 지정합니다.

from datetime import timedelta

from couchbase.auth import PasswordAuthenticator
from couchbase.cluster import Cluster
from couchbase.options import ClusterOptions

username = "Administrator"
password = "password"

auth = PasswordAuthenticator(username, password)

cluster = Cluster('couchbase://localhost', ClusterOptions(auth))

cluster.wait_until_ready(timedelta(seconds=5))

버킷(bucket)

생성한 cluster를 통해 버킷에 접근 할 수 있습니다.

bucket_name = "travel-sample"
bucket = cluster.bucket(bucket_name)

컬렉션(collection)

컬렉션은 문서를 목적이나 주제별로 그룹화할 수 있게 해줍니다. 컬렉션은 지정된 스코프 내에 존재합니다.

예시에서는 Travel Sample 버킷의 inventory 스코프 내의 airline 컬렉션을 사용합니다.

airline = bucket.scope("inventory").collection("airline")

문서 넣기 : upsert

airline 컬렉션에 airline_8091 라는 키로 문서를 넣어보겠습니다. 해당 키에 기전의 데이터가 있으면 update 없으면 insert 처리합니다.

결과값에서 CAS(Compare And Swap) 정수값을 확인 할 수 있습니다. 해당 값은 문서의 현재 상태를 나타내는 값으로, 문서가 수정될 때마다 변경됩니다. 동시에 같은 문서를 수정을 방지하는 용도로 사용 할 수 있습니다.

doc = {
    "type": "airline",
    "id": 8091,
    "callsign": "CBS",
    "iata": None,
    "icao": None,
    "name": "Couchbase Airways",
}

key = doc["type"] + "_" + str(doc["id"])
result = airline.upsert(key, doc)

print(result.cas)

결과 가져오기 : get

저장한 값은 get을 통해 가져올 수 있습니다. 가져온 결과에서 content_as 속성값을 통해서 원하는 타입으로 데이터를 형변환 할 수 있습니다.

key = airline_8091
result = airline.get(key)

print(result.content_as[str])
print(result.content_as[dict].get('id'))

SQL++ (N1QL)

SQL과 유사한 쿼리 언어를 사용하여 저장된 문서에서 데이터를 가져올 수 있습니다. 아래의 페이지를 참고하여 SQL++ 작성해 보시길 바랍니다.

inventory_scope = self.bucket.scope("inventory")

sql_query = "SELECT VALUE name FROM airline WHERE type = $1 LIMIT 5"

row_iter = inventory_scope.query(
    sql_query,
    QueryOptions(positional_parameters=["airline"]),
)

for row in row_iter:
    print(row)
40-Mile Air
Texas Wings
Atifly
Jc royal.britannica
Locair

정리


Couchbase는 문서기반의 NoSQL로 JSON 같은 데이터를 저장하는데 적합한 데이터베이스 입니다. 버킷 단위로 문서를 저장하며 scope와 collection을 통한 논리적 분할을 통해 문서를 효율적으로 관리가 가능합니다. 또한 SQL과 유사한 N1QL 쿼리 언어 지원으로 저장한 문서를 보다 다양하게 활용할 수 있게 해줍니다.

Couchbase NoSQL

tiaz0128

Eat Sleep Coding.

Never Never Giveup.

💫 Python  |  BackEnd  |  Cloud Architect  |  DevOps