noSql

CouchBase > Primary Index 와 Secondary Index

즐겁게살자 2022. 12. 27. 17:23
728x90

Couchbase 공식 가이드 참조

 

카우치 베이스에는 Index에 두가지 타입이 존재한다.  하나는 Primary Index, 다른 하나는 Secondary Index.

 

 

Primary Index

primary Index라고 하면 RDB 에서의 primary index라고 생각 될 수 있는데, 그것과는 성격이 다르다.

No Sql 특성상 JSON 도큐먼트의 ID (document id) 라고 봐야 한다. Document 키스페이스만 Primary Index가 될 수 있다.

 

예를 들어 아래 같이 쿼리한 결과,

SELECT meta().id, travel
FROM `travel-sample`.inventory.airline travel
LIMIT 1;

데이터가 다음과 같았다면,

[
    {
        "id": "airline_10", 
        "travel": {
            "callsign": "MILE-AIR",
            "country": "United States",
            "iata": "Q5",
            "icao": "MLA",
            "id": 10,
            "name": "40-Mile Air",
            "type": "airline"
        } 
    }
]

 

* document key에 해당하는 'airline_10'이 primery Index에 해당 된다. 

 

하지만, document key가 있다고 해서 무조건 Index가 되는것은 아니고, Primary Index도 create 문을 통해서 생성 해야 만 만들어 진다. 

CREATE PRIMARY INDEX ON `travel-sample`.inventory.airline;

 

Primary Index가 없더라도 NoSql 특성상 document Id를 통해서 데이터 조회가 가능하기 때문에 Primary Index를 꼭 생성 해야 하는 것도 아니다.   다만, SQL Query를 사용하여 데이터를 조회하고자 할때 Primary Index가 없으면 조회될 수 없도록 하고 있다.

따라서 Query를 사용하고자 한다면 필수로 생성해야 하는 Index인데,  'document Id' 만 저장되는 index 로 이해 하면 된다.

 


Secondary Index

DocumentId를 제외한 Document의 모든 key-value에 대한 인덱스이다.  Rdb에서 생각하는 필드 Index라고 보면 된다.

같은 Document type의 데이터를 Query 조회할때 조건절에 해당하는 필드들을 지정 하게 된다.