»öÀÎ DBÀÇ »ý¼º
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : JCvs>Search>Document>Index



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 Index(»öÀÎ)ÀÌ ¿Ö ÇÊ¿äÇѰ¡?
2 »öÀÎ DBÀÇ ±¸Ãà¿¡ ´ëÇØ¼­
3 »öÀÎDBÀÇ ±¸Ãà ¹æ¹ý
3.1 Å×ÀÌºí ±¸¼º
3.2 ´Ü¾î ÃßÃâ±â
3.3 Indexer
4 ÇöÀçÀÇ »öÀÎ DB°¡ °¡Áø ¹®Á¦Á¡°ú ÇØ°á¹æ¾È
4.1 Âü/°ÅÁþ¸¸À» ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù

  • À̱ÛÀº Related Link ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ Áغñ´Ü°èÀÇ ¹®¼­´Ù. °¡º±°Ô ÀÐÀ¸¸é µÉ °Í °°´Ù. ¿À·¡Àü¿¡ ÀÛ¼ºÇÑ ±ÛÀÌ¶ó¼­ ¼öÁ¤ÇØ¾ß µÉ °÷ÀÌ ¸¹Áö¸¸ ±ÍÂúÀ¸´Ï ±×³É ÀÌ´ë·Î À¯Áö.

1 Index(»öÀÎ)ÀÌ ¿Ö ÇÊ¿äÇѰ¡?

°Ë»ö¿£ÁøÀº ´Ü¾î´ÜÀ§·Î ÀÌ·ç¾îÁø´Ù. ¿ì¸®°¡ Linux¶ó´Â ´Ü¾î¸¦ °Ë»ö keyword·Î »ç¿ëÇÑ´ÙÇÔÀº Linux¶õ ´Ü¾î¸¦ Æ÷ÇÔÇÑ ¹®¼­¸í°ú ¸µÅ©Á¤º¸¸¦ °Ë»ö½Ã½ºÅÛ¿¡ ¿ä±¸ÇÏ´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î °Ë»ö½Ã½ºÅÛÀº °¢ ´Ü¾îº°·Î ÇØ´ç ´Ü¾î¸¦ Æ÷ÇÔÇϰí ÀÖ´Â ¹®¼­ÀÇ Á¤º¸¸¦ DBÈ­ ÇØ¼­ °ü¸®Çϰí ÀÖ¾î¾ß ÇÑ´Ù.

±¹¾î»çÀü¿¡¼­ ´Ü¾î·ÎµÈ ¸ñÂ÷ÆäÀÌÁö°¡ ¾øÀ»°æ¿ì¸¦ »ó»óÇØº¸µµ·Ï ÇÏÀÚ.

2 »öÀÎ DBÀÇ ±¸Ãà¿¡ ´ëÇØ¼­

°£´ÜÇÏ°Ô »ý°¢ÇÏÀÚ¸é ¿À¶óŬÀ̳ª Mysql°ú °°Àº RDB¸¦ ÀÌ¿ëÇØ¼­ »öÀÎDB¸¦ ±¸ÃàÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ½ÇÁ¦ ¸î¸î °Ë»ö¿£ÁøÀº ÀÌ·¯ÇÑ RDB¸¦ ÀÌ¿ëÇØ¼­ »öÀÎDB¸¦ ±¸ÃàÇϱ⵵ ÇÑ´Ù. À̵é RDB¸¦ »ç¿ëÇÒ °æ¿ì, DB½Ã½ºÅÛÀ» »õ·Î ¸¸µé Çʿ䰡 ¾øÀ¸¹Ç·Î °³¹ß½Ã°£À» ´ÜÃà½Ãų ¼ö ÀÖ±ä ÇϰÚÁö¸¸ ¾Æ·¡¿Í °°Àº ¹®Á¦¿¡ Á÷¸éÇÏ°Ô µÈ´Ù.
  • µ¥ÀÌÅÍÀǾçÀÌ ¸¹¾ÆÁú ¼ö·Ï ´À·ÁÁø´Ù.
    RDB´Â ÀϹÝÀûÀÎ DB½Ã½ºÅÛÀÌ´Ù. ´Ù¾çÇÑ ÇüÅÂÀÇ Á¤º¸¸¦ ÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î DBÈ­ ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î DBÈ­ ÇÒ°æ¿ì ºñÈ¿À²ÀûÀÎ ÇüÅÂÀÇ Á¤º¸µéµµ ÀÖ´Ù.
    ¿¹¸¦ µé¾î¼­ ¸ðµç ÀÎÅÍ³Ý ¼­ºñ½º¿¡ ´ëÇÑ 5ºÐµ¿¾ÈÀÇ Åë°è µ¥ÀÌÅ͸¦ À¯ÁöÇØ¼­, °¢ ¼­ºñ½º¿¡ ´ëÇÑ º¯È­ ÃßÀ̸¦ »ìÇÇ´Â ½Ã½ºÅÛÀ» °³¹ßÇÑ´Ù°í ÇßÀ» ¶§, RDB¸¦ »ç¿ëÇÒ°æ¿ì 5ºÐµ¿¾È Ä«¿îÆÃµÈ ¸ðµç ³×Æ®¿öÅ© ¼­ºñ½º¿¡ ´ëÇÑ Á¤º¸¸¦ 5ºÐ´ÜÀ§·Î ±â·ÏÇØ¾ß ÇÑ´Ù. Æò±Õ 100°ÇÀÇ ³×Æ®¿öÅ© ¼­ºñ½º¿¡ ´ëÇÑ Ä«¿îÆÃÀÌ ÀϾ´Ù¸é, ÇÏ·ç¿¡ 28800ÀÇ ·¹Äڵ尡 ½×ÀÌ°Ô µÈ´Ù. °Ô´Ù°¡ ¼­ºñ½ºÀÇ ¹üÀ§´Â ´ë·« 60000Á¤µµ°¡ µÈ´Ù. ÀÌ·¸°Ô ¹«½ÄÇϰÔ? DBÈ­ ÇÑ´ÙÀ½¿¡, ½×¿©Áø DB·ÎºÎÅÍ Àϰ£, ÁÖ°£, ¿ù°£, ³â°£ Åë°è¸¦ °¡Á®¿Í¾ß µÈ´Ù°í °¡Á¤À» ÇØº¸ÀÚ. À̰ÍÀ» Àü¿ëÀÇ DBÇüÅ·Π¸¸µç´Ù¸é, ¹ü¿ëÀûÀÌÁø ¾ÊÁö¸¸ ÁÖ¾îÁø ÀÏÀ» Çϴµ¥, ÈξÀ È¿°úÀûÀÎ DB¸¦ ±¸ÃàÇÒ ¼ö ÀÖ´Ù.
    °Ë»ö¿£Áø ¿ª½Ã Ư¼º»ó ´ë·®ÀÇ µ¥ÀÌÅ͸¦ ´Ù·ê ¼ö ¹Û¿¡ ¾ø´Âµ¥, RDB¸¦ »ç¿ëÇÒ°æ¿ì µ¥ÀÌÅͰ¡ ÃæºÐÈ÷ ´©ÀûµÇ¾úÀ» ¶§ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ¹Û¿¡ ¾ø´Ù. ¹°·Ð DBÆ©´×µîÀ» ÅëÇØ¼­ È¿À²¼ºÀ» ³ôÀÏ ¼ö ÀÖ°ÚÁö¸¸, Æ©´×ÀÚüµµ ¸¸¸¸ÇÑ ÀÏÀÌ ¾Æ´Ï¸ç ±× °á°ú ¿ª½Ã Àå´ãÇÒ ¼ö°¡ ¾ø´Ù.

  • ¶óÀ̼¾½º ºñ¿ë
    °Ë»ö¿£ÁøÀº ´ë·®ÀÇ µ¥ÀÌÅ͸¦ ´Ù·ç¾î¾ß Çϱ⠶§¹®¿¡, ºÐ»êȯ°æ¿¡¼­ ÀÛµ¿ÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ÀÌ·¯ÇÑ »óȲ¿¡¼­ »ó¿ëDB¸¦ »ç¿ëÇÏ°Ô µÉ°æ¿ì ºñ¿ë¹®Á¦¸¦ °í·ÁÇØ¾ß ÇÒ °ÍÀÌ´Ù.

3 »öÀÎDBÀÇ ±¸Ãà ¹æ¹ý

¿ì¼± ¹«¾ùÀ» »öÀÎÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇØ¾ß ÇÑ´Ù. ±¹¾î»çÀüÀ̶ó¸é "´Ü¾î"°¡ »öÀÎÀÌ µÇ°í, »öÀÎÀÇ Á¤º¸·Î´Â ´Ü¾îÀÇ ¼³¸íÀÌ ³ª¿ÍÀÖ´Â ÆäÀÌÁöÀÇ ¹øÈ£°¡ µÉ °ÍÀÌ´Ù.

°Ë»ö¿£Áø¿¡¼­ÀÇ »öÀÎÀº ¹®¼­¿¡¼­ ¿øÇÏ´Â ´Ü¾î¸¦ ÃßÃâÇØ¼­ ºü¸¥½Ã°£¿¡ ÇØ´ç´Ü¾î¸¦ Æ÷ÇÔÇÏ´Â ¹®¼­ÀÇ À§Ä¡¸¦ °¡Áö°Ô µÈ´Ù. ÀÌ·¯ÇÑ »öÀÎÀ» ³ªµé±â À§Çؼ­´Â ´Ü¾î¸¦ ÃßÃâÇØ ³¾ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¿µ¹® ¹®¼­¸¦ ±âÁØÀ¸·Î »ý°¢ÇØ º¸¸é ´Ü¾îÃßÃâ ÇÁ·Î±×·¥Àº °£´ÜÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. »öÀÎDB¿ª½Ã °¡´ÉÇÏ¸é ´Ü¾îÀÇ °¹¼ö°¡ ÀûÀ» ¼ö·Ï È¿À²ÀûÀÎ °Ë»öÀÌ °¡´ÉÇÑ DB¸¦ ¸¸µé ¼ö Àֱ⠶§¹®¿¡ ÇüÅÂ¼Ò ºÐ¼®±â°¡ »ç¿ëµÈ´Ù. ƯÈ÷ Çѱ۹®¼­¸¦ »öÀÎÇϰíÀÚ ÇÒ°æ¿ì ¾ó¸¶³ª ÁÁÀº ÇüÅÂ¼Ò ºÐ¼®±â¸¦ °¡Áö°í ÀÖ´À³Ä°¡ »öÀÎDBÀÇ Ç°ÁúÀ» °áÁ¤ÇÏ°Ô µÈ´Ù.
¿¹¸¦ µé¾î¼­ ¾Æ·¡¿Í °°Àº ³»¿ëÀ» Æ÷ÇÔÇÑ 4°³ÀÇ ¹®¼­°¡ ÀÖ´Ù°í °¡Á¤ÇØ º¸ÀÚ.
Document 1 : Linux Programing language Perl, Python  
Document 2 : Linux's Free mind  
Document 3 : Hello World gnu mind  
 
´Ü¾îÃßÃâ±â¸¦ µ¹·Á¼­ ´ÙÀ½°ú °°Àº ´Ü¾îÀÇ ¸ñ·ÏÀ» ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.
D1 = {linux, programing, language, perl, python} 
D2 = {linux, Free, mind} 
D3 = {hello, world, gnu, mind} 
 
¾òÀ» ¼ö ÀÖ´Â ´Ü¾î´Â À¯ÀÏÇÑ Å°¸¦ °¡Áö´Â setÇüÅÂÀÇ ÀڷᱸÁ¶°¡ µÇ¸ç, ´ÙÀ½°ú °°Àº ´Ü¾îµéÀ» Æ÷ÇÔÇÏ°Ô µÉ°ÍÀÌ´Ù - °£´ÜÈ÷ ¸»Çؼ­ ÇÕÁýÇÕ -.
Terms = {linux, programing, language, perk, pytoh, free, mind, hello, world, gnu} 
 
ÀÌ·¯ÇÑ ´Ü¾îµéÀº ´Ù½Ã, "¾î´À ¹®¼­"¿¡ Æ÷ÇԵǾî ÀÖ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ µ¡ºÙ¿©Áà¾ß ÇÑ´Ù. key/value¸¦ °¡Áö´Â mapÀڷᱸÁ¶°¡ µÉ °ÍÀÌ´Ù.
map<string Terms, vector<string> Documents> IndexMap;  
--- 
linux = {Document 1, Document 2}; 
perl = {Document 1}; 
mind = {Document 2, Document 3}; 
... 
 
¿©±â±îÁö ÁøÇàµÇ¾ú´Ù¸é »öÀÎDB´Â ¿Ï¼ºµÈ °ÍÀ¸·Î º¼ ¼ö ÀÖ´Ù - ¹°·Ð Á¦´ë·ÎµÈ »öÀÎDB¸¦ ±¸ÃàÇÒ·Á¸é "Á߿䵵"µîÀ» Æ÷ÇÔÇÑ ºÎ°¡Á¤º¸µéÀÌ ´õ Ãß°¡µÇ¾î¾ß ÇϰÚÁö¸¸ -. °Ë»öÀº °Ë»ö¿£Áø¿¡ ¸Ã±â¸é µÈ´Ù.

3.1 Å×ÀÌºí ±¸¼º

±×·³ È¿°úÀûÀÎ »öÀÎ Å×À̺íÀ» ±¸¼ºÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ °í¹ÎÀ» ÇØº¸µµ·Ï ÇϰڴÙ. »öÀÎDB¿¡ µé¾î°¡´Â Á¤º¸´Â À§¿¡¼­ ¼³¸íÇßµíÀÌ map<string Terms, vector<string> Documents> ÀÌ´Ù. À̸¦ µÎ°³ÀÇ Çʵå·Î ±¸¼ºÇÏ°Ô µÉ°æ¿ì, ù¹øÂ° Çʵå´Â À¯´ÏÅ©ÇÑ ´ÜÀÏ °ªÀÌ µÇ°ÚÁö¸¸, µÎ¹øÂ° Çʵå´Â vector°¡ µÇ¾î¾ß ÇÑ´Ù´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù. ÀÌ ¹®Á¦´Â Documents vectorÀ» º°µµÀÇ Å×À̺í·Î ±¸¼ºÇÏ´Â °ÍÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù.

idx_table.png

±×¸²ÀÌ Á¶ÀâÇϱä ÇÏÁö¸¸ ÀÌÇØÇϴµ¥, ¹®Á¦´Â ¾øÀ¸¸®¶ó »ý°¢µÈ´Ù.

À§ÀÇ µÎ°³ÀÇ Å×À̺íÀÌ¸é ±âº»ÀûÀÎ ¿ä°ÇÀ» ÃæÁ·ÇÏ´Â À̸¦Å׸é ÇнÀÀÇ ¿ëµµ¸¦ À§ÇÑ »öÀÎDB¸¦ ±¸ÃàÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¼­ºñ½º°¡ °¡´ÉÇÑ ¼öÁØÀÌ µÇ±â À§Çؼ­´Â "¹®¼­¿ä¾à", "Á߿䵵", "µ¥ÀÌÅÍ °»½ÅÀÏ"µîÀÇ ºÎ°¡Á¤º¸°¡ Á¤¸®µÇ¾î¾ß ÇÑ´Ù. À̸¦ À§Çؼ­´Â º°µµÀÇ summary Å×À̺íÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù.

3.2 ´Ü¾î ÃßÃâ±â

´ÙÀ½Àº regex¸¦ ÀÌ¿ëÇØ¼­ ¸¸µé¾îº» °£´ÜÇÑ ¿µ¹®´Ü¾î ÃßÃâ±âÀÌ´Ù.
#include <sys/types.h> 
#include <regex.h> 
#include <string.h> 
#include <stdio.h> 
#include <errno.h> 
 
int main(int argc, char **argv) 
{ 
    FILE *fp; 
    int rtv; 
    regex_t preg; 
    char linebuf[1024]; 
    char *tr; 
    char seps[] = " -.,()\";:"; 
    char msg[64]; 
 
    if (argc != 3) 
    { 
        printf("Usage : %s [filename] [pattern]\n", argv[0]); 
    } 
    fp = fopen(argv[1], "r");     
    if (fp == NULL) 
    { 
        perror("Error "); 
        return 1; 
    } 
    rtv = regcomp(&preg, argv[2], REG_EXTENDED|REG_NOSUB);  
    if(rtv != 0) 
    { 
        regerror(rtv, &preg, NULL, 0); 
        return 1; 
    } 
 
    while(fgets(linebuf, 1024, fp) != NULL) 
    { 
        linebuf[strlen(linebuf)-1] = '\0'; 
        tr = strtok(linebuf, seps); 
        while(tr != NULL) 
        { 
            tr = strtok(NULL, seps); 
            if (tr != NULL) 
            { 
                if (regexec(&preg, tr, 0, NULL, 0) == 0) 
                { 
                    printf("::%s\n", tr); 
                } 
            } 
        } 
    } 
} 
 
´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÏ¸é µÈ´Ù.
# ./parser TestDoc/rfc1023.txt "[a-zA-Z]{2}+" 
 

3.3 Indexer

¾Æ·¡ÀÇ ÇÁ·Î±×·¥Àº ÁÖ¾îÁø ÆÄÀÏ¿¡¼­ ´Ü¾î¸¦ ÃßÃâÇØ¼­ »öÀÎÀ» ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
#include <sys/types.h> 
#include <regex.h> 
#include <string.h> 
#include <stdio.h> 
#include <errno.h> 
#include <map> 
#include <vector> 
#include <string> 
#include <set> 
 
using namespace std; 
 
int main(int argc, char **argv) 
{ 
    FILE *fp; 
    int rtv; 
    regex_t preg; 
    char linebuf[1024]; 
    char *tr; 
    char seps[] = " -.,()\";:{}'+"; 
    char msg[64]; 
    map<string, set<string> > IndexMap; 
    map<string, set<string> >::iterator Mi; 
    vector<string> FileList;  
 
    FileList.push_back("TestDoc/rfc1023.txt"); 
    FileList.push_back("TestDoc/rfc1036.txt"); 
 
    if (argc != 3) 
    { 
        printf("Usage : %s [filename] [pattern]\n", argv[0]); 
    } 
    rtv = regcomp(&preg, argv[2], REG_EXTENDED|REG_NOSUB);  
    if(rtv != 0) 
    { 
        regerror(rtv, &preg, NULL, 0); 
        return 1; 
    } 
 
    for(int i = 0; i < FileList.size(); i++) 
    { 
        fp = fopen(FileList[i].c_str(), "r");     
        if (fp == NULL) 
        { 
            perror("Error "); 
            return 1; 
        } 
   
        while(fgets(linebuf, 1024, fp) != NULL) 
        { 
            linebuf[strlen(linebuf)-1] = '\0'; 
            tr = strtok(linebuf, seps); 
            while(tr != NULL) 
            { 
                tr = strtok(NULL, seps); 
                if (tr != NULL) 
                { 
                    if (regexec(&preg, tr, 0, NULL, 0) == 0) 
                    { 
                        Mi = IndexMap.find(tr); 
                        IndexMap[tr].insert(FileList[i]); 
                    } 
                } 
            } 
        } 
        fclose(fp); 
    } 
    printf("Term Size %d\n", IndexMap.size()); 
 
    Mi = IndexMap.begin(); 
    set<string>::iterator Si; 
    int inum; 
 
    // »öÀΰá°ú Ãâ·Â 
    while (Mi != IndexMap.end())  
    { 
        printf("==== %s ==== \n",  Mi->first.c_str()); 
        Si = Mi->second.begin(); 
        inum = 1; 
        while(Si != Mi->second.end()) 
        { 
            printf("%02d : %s\n", inum, Si->c_str()); 
            inum++; 
            *Si++; 
        } 
        *Mi++; 
    } 
} 
 

4 ÇöÀçÀÇ »öÀÎ DB°¡ °¡Áø ¹®Á¦Á¡°ú ÇØ°á¹æ¾È

4.1 Âü/°ÅÁþ¸¸À» ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù

ÇöÀç ¸¸µé¾îÁø »öÀÎ DB´Â ºÒ¸®¾ð ¸ðµ¨À» µû¸¥´Ù. ºÒ¸®¾ð ¸ðµ¨Àº ¸Å¿ì ºü¸£´Ù¶ó´Â ÀåÁ¡À» °¡ÁöÁö¸¸, ¿À·ÎÁö "Âü"°ú "°ÅÁþ"¸¸À» ³Ñ°ÜÁشٴ ´ÜÁ¡ÀÌ ÀÖ´Ù. ÇØ´ç ´Ü¾î°¡ ±× ¹®¼­¿¡ Æ÷ÇԵǾîÀÖÀ¸¸é 1, ±×·¸Áö ¾ÊÀ¸¸é 0À» ³Ñ°ÜÁÖ´Â ½ÄÀε¥, ´Ü¼øÈ÷ ÇØ´ç¹®¼­¿¡ ´Ü¾î°¡ Æ÷ÇԵǾî ÀÖ´Ù´Â Á¤µµ¸¸À» °¡Áö°í´Â ³ôÀº ÁúÀÇ °Ë»ö ¼­ºñ½º¸¦ Á¦°øÇÒ ¼ö ¾ø´Ù. »ç¿ëÀÚ´Â Á߿䵵°¡ ³ôÀº ¹®¼­¸¦ ã±â¸¦ ¿øÇϱ⠶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î »öÀÎ DB´Â "Á߿䵵"µîÀÇ ´Ù¸¥ ±âÁØÀ¸·Î °Ë»ö°á°ú¸¦ ¼ÒÆ®ÇØ¼­ °á°ú¸¦ µÇµ¹·ÁÁÙ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

¹®¼­¿¡ ´ëÇÑ Á߿䵵¹× °¡ÁßÄ¡ °è»ê¿¡ ´ëÇÑ ³»¿ëÀº µû·Î ´Ù·çµµ·Ï ÇϰڴÙ.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.