Egloos | Log-in


저장은 DB로 열람은 검색기로

웹서비스를 만들면서 자주 만나게 되는 문제가 있다. 목록 형태로 정보를 열람하는 문제인데... 열람 대상 객체와 관련이 있는 다른 객체의 속성을 같이 보여주거나 정렬을 해야하면 정말 골치 아프다. 그런데 기획자들은 다양한 기준으로 정렬하고 부가 정보도 최대한 같이 보여주고 싶어 한다. 어떤 열람 방식이 최적인지 판단하기 힘드니 일단 사용자에게 다양한 방식을 제공하기 위해서인 것 같다.

이런 요구 사항은 RDBMS로 구현하기가 쉽지 않다. 데이터가 적은 경우는 그냥 JOIN을 사용하면 되는데 데이터가 많은 경우는 JOIN하기 어려운 경우도 많다. 반정규화를 해야 하면 코드도 늘어나고 데이터가 서로 일치 하지 않는 경우도 종종 발생해서 개발자를 괴롭힌다. 그냥 덮어 두기에는 너무 자주 만나는 상황이라 방법을 찾았으면 좋겠다. 한가지 생각한 방법은 데이터는 RDBMS나 단순한 DB에 다 넣고, 열람할 때는 검색 엔진을 쓰는 것이다. 검색 엔진을 쓰면 인덱스를 만들 때 검색 대상과 관련 속성도 같이 넣어 놓으면 쉽게 정렬할 수 있고 보여줄 수도 있다.

문제는 검색 엔진이다. 실시간으로 인덱스를 추가할 수 있어야 하고 문자열만 아니라 다양한 형의 필드를 지원해야 하고, 여러 서버에서 동작해야 한다. 자바로 만들어진 Lucene가 적당해 보인다. JDBC로 인덱스를 저장할 수도 있으니 여러 대의 서버에서도 돌아갈 것 같다. 하지만 API가 그리 쉬워보이지는 않는다. 검색을 해보니 비슷한 생각을 하는 사람이 있다. 이미 누군가 만들어 놓았을 것 같은데 못찾겠다. 일단 접었다.

오늘 어쩌다 Compass 라는 것을 봤다. 메뉴얼을 보니 그럴싸 하다. 검색 속도만 충분히 빠르다면 쓸만할 것 같다. "이건 구현하기 힘들어요", 반정규화, 복잡한 WHERE 절, 페이징 처리와 이별할 수 있을까?

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 이피 | 2008/12/23 16:37 | 트랙백(1) | 덧글(2)

트랙백 주소 : http://colus.egloos.com/tb/4787284
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from eungju's me2.. at 2009/02/28 09:17

제목 : EP의 생각
http://bret.appspot.com/entry/how-friendfeed-uses-mysql 저장과 색인의 분리를 이미 활용하고 있군. 전문검색이 필요 없다면 검색 엔진 쓰지 않고 RDBMS만 써서 구현한 이 방법이 나아 보인다....more

Commented by 최종욱 at 2009/01/22 23:38
Compass 멋지군요!
Commented by 최종욱 at 2009/01/22 23:38
써놓고 보니까 블로그 스팸같은 답글이네요; 여하튼 Compass 개발자의 블로그도 재미있어서 흥미롭게읽어보고 있습니다.

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶