본문 바로가기
Programming/Database

[Mongo DB] MongoDB Column Store Index 대체 있는 거야?

by 째스터 2025. 7. 26.
728x90

LLM의 등장 이후로 기술에 대한 글은 올릴만한 게 별로 없다.
그래도 잘못된 정보나 테스트 결과는 알 수 있으므로 오랜만에 글을 쓴다.

Mongo DB에서 집계 쿼리의 성능을 개선해야 하는 일이 있었다.
나는 예전에 MS SQL Server에서 Columnstore Index로 집계 쿼리 성능을 비약적으로 상승시킨 경험이 있었다.

먼저 Columnstore Index란 기존 우리에게 익숙한 Row Store Index와 다르게 각 Column 단위로 데이터를 저장한다.
MS SQL 기준으로 104만 개의 row 단위로 행 그룹을 나누어 Column Segment에 각 열의 데이터를 저장한다.
특히 대규모 데이터의 집계 쿼리에서 성능 개선의 효과가 있었다.

먼저 Mongo DB 공식 documentation에 Columnstore Index는 역시 없었다.
그런데 NoSQL DB라서 없을 거라 예상했지만 preview로 발표되었다는 2022년 글이 있었다.
https://www.theregister.com/2022/06/07/mongodb_columnstore_indexing/

 

MongoDB bringing columnstore indexing to document database

Boost to in-database analytics should help replace some human decision-making, vendor claims

www.theregister.com

 

공식 MongoDB Compass의 Release note에도 Columnstore Index의 흔적이 남아 있었다.

그래서 지푸라기라도 잡는 심정으로 테스트해 봤다.
(참고로 Columnstore Index의 아무 기록도 없기 때문에 Grok이 알려주는 그대로 진행해 볼 수밖에 없었다.)

결론부터 말하자면 Columnstore Index는 동작이 되지 않거나 사용할 수 없는 것으로 보인다.

MongoDB 7, 8 모두에서 테스트를 진행했다.
먼저 mongod.conf 파일에서 다음과 같이 ColumnstoreIndex feature를 enable 한다.

setParameter:
  featureFlagColumnstoreIndexes: true

참고로 MongoDB 7의 경우 SBE가 default로 비활성화되어서 아래와 같이 enable 해야 한다.

db.adminCommand({ setParameter: 1, internalQueryFrameworkControl: "trySbeEngine" })

 

그리고 다음과 같이 인덱스를 생성한다.

db.collection.createIndex({ "$**": "columnstore" })


나는 1,600만 개의 document가 있어서 인덱스 생성이 오래 걸렸다.
다음과 같이 용량도 잡히고 columnstore 인덱스가 생성된 것도 확인할 수 있었다.

 

그리고 이후로 엄청난 똥꼬쇼가 시작됐다.
매우 간단한 Distinct, Count부터 매우 복잡한 쿼리까지 쿼리를 실행해 보고, 실행 계획을 봤다.
그 어떤 쿼리도 실행 계획이 Grok이 말한 대로 COLUMN_SCAN이 나오지 않았다.

이제 hint로 $**_columnstore 인덱스를 사용하도록 강제해 봤다.
그러자 실행 계획에는 COLUMN_SCAN이 나오긴 하지만 실행 시간은 더 오래 걸리기 시작했다.
(심지어 MongoDB 8에서는 UNKNOWN stage로 표시된다.)

왼쪽은 힌트 없이 실행 오른쪽은 힌트로 강제한 실행 계획이다.

데이터도 더 넣어보고 이것저것 시도해 본 후에 사용하지 않는 것으로 결정했다.
공식 문서에 없는 내용이라 된다고 해도 언제 사라질지, 공식 기능이 될지, 유료화가 될지 알 수 없는 상황이긴 했다.
Grok의 학습 당시 공식 문서에는 관련 내용이 있었던 것 같다.

마지막으로 혹시나 하는 마음에 MongoDB Atlas에서도 해봤지만 애초에 Columnstore feature를 enable조차 할 수 없었다.
Support에 물어봐도 다음과 같은 답변을 받았다.

 

오늘의 교훈: AI의 말만 듣고 쓸데 없는 노력을 기울이지 말자..

728x90

댓글