[번역] Groonga의 특징

ma2sql·2020년 12월 20일

공식 사이트의 메뉴얼을 한 번 번역해보았습니다만, 구글 또는 파파고의 번역이 더 좋은 것 같네요.

원문: http://groonga.org/ja/docs/characteristic.html

1.1. Groonga의 개요

Groonga는 전치색인(Inverted index)을 사용한 고속/고밀도한 전문검색엔진으로, 등록된 문서를 바로 검색결과로 반영할 수 있다. 또한, 참조를 블록하지 않고 갱신할 수 있기 때문에, 즉시 갱신의 필요가 있는 어플리케이션에 있어서도 높은 성능을 발휘한다.

전문 검색 엔진으로써 개발된 Groonga 지만, 독자적인 컬럼 스토어를 가져 열 지향성의 데이터베이스(Column-oriented DBMS)로서의 측면도 가지고 있다. 그렇기 때문에, MySQL이나 PostgreSQL 등 기존의 대표적인 데이터베이스가 처리하기 어려운 통계 쿼리를 고속으로 처리할 수 있는 특징이 있어, 조합에 따라 약점을 커버할 수 있는 사용도 가능하다.

Groonga의 기본 기능은 C라이브러리로서 제공되고 있지만, MySQL이나 PostgreSQL과 연계시키거나, Ruby로부터 호출하거나 하는 것도 가능하다. 그렇기 때문에, 임의의 어플리케이션에 편입시키는 것이 가능해, 다양한 사용법이 고안될 수 있다. 흥미가 있는 사람은 사용 예를 참고하자.

1.2. 전문검색과 즉시 갱신

일반적인 데이터베이스에 있어서, 추가/삭제 등의 조작은 바로 반영된다. 한편, 전문 검색에 있어서는, 전치색인이 순차 갱신이 어려운 데이터 구조이기 때문에, 문서의 추가/삭제에 대응하지 않는 엔진이 적지 않다.

이것에 대해, 전치색인을 사용한 전문검색 엔진이면서도 Groonga는 문서를 단시간에 추가/삭제하는 것이 가능하다. 거기에, 갱신을 하면서도 검색할 수 있는 우수한 특징을 가지고 있기 때문에, 전문 검색 엔진으로서는 매우 유연한 특성을 가지고 있다. 또한, 복수의 전치색인을 통합하는 것과 같은 무거운 처리를 필요로 하지 않기 때문에, 안정적이고 높은 성능을 발휘하는 것을 기대할 수 있다.

1.3. 컬럼 스토어과 통계 쿼리

현대에는, 인터넷을 정보원이라고 한다면, 얼마든지 정보를 수집하는 것이 가능한 시대이다. 그러나 방대한 정보로부터 유익한 정보를 추출하는 것은 곤란해서, 다각적인 분석에 의한 시행착오가 필요하게 된다. 예를 들면, 날짜나 시간대에 의한 축약해본다던가, 지역에 의해 축약해본다던가, 성별이나 연령에 의해 축약해보는 것 등 일 것이다. 그래서, 그러한 때에 편리한 존재가 통계 쿼리이다.

통계 쿼리라는 것인 지정한 컬럼의 값에 의해 레코드를 그룹화해, 각 그룹에 포함된 레코드의 수를 구하는 쿼리이다. 예를 들면, 지역의 ID를 저장하고 있는 컬럼을 지정한다면, 지역마다의 레코드 수가 구해진다. 날짜의 컬럼을 지정하는 경우에 출력을 그룹화한다면, 레코드의 수는 시간 변화를 시각화하는 것이 가능하다. 게다가 지역에 의한 축약과 날짜에 대한 통계 쿼리를 조합한다면, 특정의 지역에 대한 레코드의 수의 시간 변화를 시각화 하는 것이 가능하다. 이러한, 척도를 자유롭게 선택해서 축약하고 집계하는 것이 가능한 것은, 방대한 정보를 취급함에 있어서도 매우 중요하다.

Groonga가 집계 쿼리를 고속으로 처리할 수 있는 이유는 데이터베이스의 논리 구조에 컬럼 스토어를 채용하고 있기 때문이다. 집계 쿼리가 참조하는 것은 지정된 컬럼만 참조하기 때문에, 컬럼 단위로 데이터를 저장하는 열 지향성의 데이터베이스(Column-oriented DBMS)에서는 필요한 컬럼만을 낭비 없이 읽어낼 수 있는 것이 이점이기 때문이다. 한편, 레코드 단위로 데이터를 저장하는 행 지향성의 데이터베이스(Row-oriented DBMS)에서는 인접하는 컬럼을 함께 읽어내어버리는 것이 결점이 된다.

1.4. 전치색인과 토크나이저

전치 색인은 대규모의 전문 검색에 사용되고 있는 전통적인 데이터 구조이다. 전치 검색을 이용한 전문 검색 엔진에서는 문서를 추가할 때 색인어를 등록해두고, 검색할 때 쿼리를 색인어로 분할해서 출현문서(出現文書)를 구한다. 그렇기 때문에, 문서나 쿼리로부터 검색어를 추출하는 방법이 중요하다.

토크나이저(Tokenizer)는 문자열로부터 색인어를 추출하는 모듈이다. 일본어를 대상으로하는 전문 색인에 있어서 형태소를 색인어로 추출하는 방식과 문자 N-Gram을 추출하는 방식 중 어느 하나를 사용하거나, 양쪽 모두를 사용하는 것이 일반적이다. 형태소 방식은 검색 시간이나 색인 크기의 면에서 우수하면서, 검색 결과에 불필요한 문서가 잘 포함되지 않는다는 장점을 가지고 있다. 한편, N-gram 방식에는 검색 누출이 잘 발생하지 않는다는 장점이 있는데, 상황에 따라서는 적절한 방식을 선택하는 것이 바람직하다고 여겨지고 있다.

Groonga는 형태소 방식과 N-gram 방식의 양쪽을 모두 지원하고 있다. 설치 초기 상태에서는 사용할 수 있는 토크나이저는 공백을 구분자 문자로서 이용하는 방식과 N-gram 방식 밖에 없지만, 형태소 분석기 MeCab을 함께 사용할 때에는 MeCab에 의한 띄어쓰기의 결과를 이용하는 형태소 방식을 사용할 수 있다. 토크나이저는 플러그인으로 추가할 수 있기 때문에, 일부 특징적인 키워드만 색인어로서 이용하는 등, 독자적인 토크나이저를 개발하는 것이 가능하다.

1.5. 공유 가능한 스토리지와 참조 락 프리

CPU의 멀티 코어화가 발전하고 있기 때문에, 동시에 복수의 쿼리를 실행하거나, 하나의 쿼리를 복수의 스레드로 실행하는 것의 중요성이 점점 더 높아지고 있다.

Groonga의 스토리지는 복수의 스레드/프로세스에서 공유하는 것이 가능하다. 또한, 참조 락 프리(free)한 데이터 구조를 사용하고 있기 때문에, 갱신 쿼리를 실행하고 있는 상황에서도 참조 쿼리를 실행하는 것이 가능하다. 참조 쿼리를 실행할 수 있는 상황을 유지하면서 갱신 쿼리를 실행할 수 있기 때문에, 리얼타임 시스템에 적합하다. 게다가, MySQL을 통해서 갱신 쿼리를 실행하고 있는 동안에, Groonga의 HTTP서버를 통해서 참조 쿼리를 실행하는 등, 다양한 운용이 가능하도록 구현되어 있다.

1.6. 위치 정보 (위도/경도) 검색

GPS로 대표되는 측위 시스템을 탑재한 고기능 휴대 전화의 보급에 의해, 위치 정보를 취급하는 서비스는 점점 편리하게 되어가고 있다. 예를 들면 가까운 곳에 있는 레스토랑을 찾을 때는 현재 위치로부터의 거리를 기준으로 검색을 하고, 검색 결과를 지도위에 표시해주는 서비스가 편리하다. 그렇기 때문에, 위치 정보 검색을 고속으로 실현하는 것이 중요해지고 있다.

Groonga에서는 전치검색을 응용해서 고속의 위치 정보 검색을 구현하고 있다. 사각형/구형을 이용한 범위 검색을 지원하는 한편, 기준점으로부터 가까운 것을 우선적으로 탐색하게 할 수 있다. 또한, 거리 계산을 지원하고 있기 때문에, 위치 정보 검색의 결과를 기준점으로부터의 거리에 따라 정렬하는 것도 가능하다.

1.7. Groonga 라이브러리

Groonga의 기본 기능은 C 라이브러리로 제공되고 있기 때문에, 임의의 어플리케이션으로 통합시켜서 사용하는 것이 가능하다. C/C++ 이외에 대해서는, Ruby에서 Groonga를 사용하는 라이브러리 등이 연관 프로젝트로서 제공되고 있다. 자세한 것은 관련 프로젝트를 참고하자.

1.8. Groonga 서버

Groonga에는 서버 기능이 있기 때문에, 렌탈 서버 등의 새로운 라이브러리를 설치할 수 없는 환경에서도 사용할 수 있다. 지원되고 있는 것은 HTTP, memcached binary 프로토콜 및 Groonga의 독자 프로토콜인 Groonga Query Transfer Protocol (GQTP)이 있다. 서버로 사용할 때에는 쿼리의 캐시 기능이 유효화되기 때문에, 동일한 쿼리에 대해서는 응답 시간이 짧아지는 특징이 있다.

1.9. Mroonga 스토리지 엔진

Groonga는 컬럼 스토어를 가지는 열 지향성의 데이터베이스(Column-oriented DBMS)로서의 측면을 가지고 있지만, 기존의 RDBMS의 스토리지 엔진으로서 이용하는 것도 가능하다. 예를 들면, Groonga를 베이스로 하는 MySQL의 스토리지 엔진으로서 Mroonga가 개발되고 있다. Mroonga는 MySQL의 플러그인으로 동적으로 로드하는 것이 가능하며, Groonga의 컬럼 스토어를 스토리지 엔진으로 이용하거나, 전문 검색 엔진으로서 Groonga를 MyISAM이나 InnoDB와 연계하여 사용하는 것이 가능하다. Groonga 단체에서의 이용 또는 MyISAM, InnoDB와의 연계에는 일장일단이 있기 때문에, 용도에 따라서 적절한 조합을 선택하는 것이 중요하다. 자세한 것은 관련 프로젝트를 참고하자.

0개의 댓글