mysql 검색성능?!

1914year의 이미지

10억개의 "단순txt문서(a4문서1/2분량)"를 mysql에서 검색하기 위해

100개의 테이블을 만들고,

각각의 테이블에 1,000만개의 레코드로 10억개의 문서를 넣었습니다.

ISAM 방식과, INNODB방식중 어떤 방식을 선택해야 할지 몰라,

일단 만만한 ISAM방식으로 만들고,

Full-text-index 를 걸었어요.

그런데 검색속도가 그리 만족스럽지 못합니다.

어떻게 좋은 방법이 없을까요??

구글이나 알타비스타 같은 것들도 mysql을 개조해서 사용하는 것으로

알고 있는데, 그것들은 한번에 검색할 수 있는 레코드 양이 얼마나

될까요?? mysql내에서 한번에 가장 많은 양을 검색하는 문제로

매일같이 흰머리가 ... ㅎㅎㅎ

익명 사용자의 이미지

검색엔진에서는

검색을 수행할 때.. mysql 같은 dbms 를 사용하지 않습니다.

그 많은 쿼리들을 rdbms 로 할경우 검색질은 둘째 치더라도...

db가 견뎌내지를 못합니다...

뭐 요는 그겁니다. 검색엔진에서는 rdbms 를 사용하지 않는다!...

1914year의 이미지

야후나 구글이 모두 mysql을 사용하는 것으로 알고 있습니다.
그런데 검색엔진 회사들이 mysql을 쓰지 않는다는 것은 무슨 의미인지?

그리고 dbms도 사용하지 않고, rdbms도 사용하지 않는다면,
fileDB를 만들어 C로 검색한다는 건가요?
정말 그것만이 가장 효율적인 방법인지?

익명 사용자의 이미지

자체적인 db 를 만들어서 사용을 하죠..

단지 그 db 의 구조는 일반적인 rdbms 가 아닙니다.

검색에 최적화된 db입니다. (물론 mysql 같은 rdbms 를 개조해서 사용하는것도 아니구요..)

그리고 rdbms 도 결국에는 file 에다 저장을 하는 filedb 라 볼수 있습니다.

mysql 같은 rdbms 가 제한적인 용도로 사용되기는 하는데

어떤 용도냐면..

웹페이지검색을 하려면 웹크롤을 해야하는데, 웹크롤 데이타를 저장하는 용도로 사용되고..

실제 검색은 rdbms 에 저장된 데이타를 덤프를 떠서(검색엔진에서 요구하는) 그 덤프데이타를

가지고 색인을 만들어서(해쉬나 B tree 같은 자료구조를 이용합니다. 물론 파일로 저장이 됩니다)

그 색인에서 검색을 하게 됩니다.

정보검색 관련 책을 읽어보시면 아시겠지만... 절대 검색대상을 rdbms 에 넣어서 검색을 하지 않습니다.

부하를 견뎌내지 못하는것은 둘째 치고..

검색을 해서.. 그냥 나열 하는것이 아니라.. 각각의 문서에 랭킹을 매기고 그 랭킹을 기준으로 정렬해서 보여줘야 하는데.. 그 랭킹은 정적으로 박힌 것도 있지만.. 동적으로 계산을 해서 정렬하는 비중이 더 큽니다.

rdbms 에서 각 레코드(문서)에 검색어와의 관계를 동적으로 랭킹(점수)을 부여할 수 있을지 궁금해지네요..

eminency의 이미지

검색엔진에서 DB를 쓰긴 합니다만, 생각하시는 용도로 쓰진 않습니다. 즉, 텍스트 서치 알고리즘과 검색 엔진의 알고리즘은 서로 용도가 다릅니다. DB의 텍스트 서치는 '해당단어가 있냐 없냐'의 용도겠죠.
무조건 Full Text Search용으로 쓴다면 '검색엔진'이란 건 필요가 없겠죠.

검색엔진들이 커버하는 웹 문서도 몇억건(맞는지는 모르겠습니다만) 수준이라서 일반 RDBMS로 감당할 수 있는 수준도 아니고요.

검색엔진들은 웹문서를 크롤링할때마다 각자 독자적인 알고리즘에 따라 인덱싱하고 인덱싱 된 단어에 따라 점수를 매기게 됩니다. 이 부분이 검색엔진의 역할이라고 할 수 있죠.

DB를 사용하는 부분은 아마도 이런 인덱싱 된 정보와 웹 페이지에 매겨진 랭크 혹은 점수를 DB 테이블에 저장하고 실제 검색시 활용하는 용도로 쓰는게 아닐까 합니다.

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5

오호라의 이미지

low레벨의 DB API를 커스터마이징해서 쓰지 않을까요? 충분히 가능할 것같습니다.

Rob pike같은 분들도 영입하는 회사인데 그정도 못하지는...

IamAboy. YouareAgirl. Ah.hhh...

Hello World.

fox9의 이미지

꼭 mysql에서 검색을 해야하나요?
단순검색용이라면 namazu를 한번 이용해보세요
근래에 사이트에 적용해서 쓰고 있는데 너무나 마음에 듭니다.

http://namazu.org

M.W.Park의 이미지

요즘의 검색엔진들은 검색자체는 대부분 inverted file 같은 구조를 사용해서 합니다.
기본적인(논리적인) 구조는 대부분의 책 뒤에 나오는 index의 형식입니다.

간단히 예를 들자면, 책의 인덱스가 다음과 같을 때,

......
구글 ...... 3p, 16p, 256p
검색 ...... 3p, 17p
......

검색어가 "구글 AND 검색"이면 위의 페이지들의 교집합(3p)이, "구글 OR 검색"이면 위의 페이지들의 합집합(3p, 16p, 17p, 256p)이 검색결과로 나오게 되는 것입니다.

다만 검색엔진도 인덱스를 저장하는 back-end는 파일 시스템을 사용할 수도 있고, (R)DBMS를 사용할 수도 있습니다.

덧붙여, 문서 내용 검색이라면 apache lucene을 권장해드리고 싶군요.

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.