Skip to main content

용어 사전

파일 (File)

  • 정의: 코드 또는 텍스트의 단일 컨테이너.
  • 특징:
    • 원본 토큰(소스 코드)의 연속으로 구성됨.
    • 인덱싱, 후보 선정, 비교 단계에서는 직접 읽지 않음.
      • 오직 뷰어 인터페이스에서만 직접 읽음.

타겟 (Target)

  • 정의: 분석을 위해 사용자가 제공한 데이터셋.
  • 특징:
    • 사용자가 제공한 파일들로 구성됨.
    • 수신 즉시 토큰화 및/또는 인덱싱 과정을 거침.
    • 소스(Source)와 별도로 관리되고, 소스에 추가하지 않음.

소스 (Source)

  • 정의: 서비스 제공자가 유지 관리하는 데이터셋 저장소.
  • 특징:
    • 타겟과 매칭하기 위한 참조 풀 역할을 함.
    • 자주 업데이트 되지 않음. 일반적으로 주간 또는 월간 일정으로 이루어짐.
    • 사전 인덱싱되어 사용자가 접근할 때 즉시 사용 가능함.
    • 후보 인덱싱 주기는 데이터 구조 설계에 영향을 미치지 않음.

데이터셋 (Dataset)

  • 정의: 파일의 집합적인 모음.
  • 유형:
    • 소스 데이터셋 (Source Dataset): 소스로 유지 관리되는 포괄적인 파일 모음.
      • 이후, "소스(Source)"로 약칭.
    • 타겟 데이터셋 (Target Dataset): 사용자가 제공한 완전한 파일 모음.
      • 이후, "타겟(Target)"로 약칭.

토큰 (Token)

  • 정의: 파일의 내용에서 파생된 가장 작은 데이터 단위.
  • 토큰화 생성 방법:
    • 코드 데이터: 코드의 구문을 기반으로 한 토크나이저에 의해 생성됨.
    • 텍스트 데이터 (자연어):
      • 서양 언어: 토큰은 공백으로 구분됨.
      • 중국어: 각 문자(한자)를 개별 토큰으로 취급함.
      • 한국어: 공백을 기준으로 토큰을 분할하고, 조사 및 접미사는 별도로 토큰화됨.
      • 일본어: 형태소 분석을 통해 토큰이 결정되며, 문법과 문맥에 따라 단어를 분할함.
      • 특별 고려사항: 한국어와 일본어 모두 형태와 구문의 복잡성을 정확히 처리하기 위해 전문 토크나이저가 필요함.

시퀀스 (Sequence)부분 시퀀스 (Subsequence)

  • 정의:
    • 시퀀스 (Sequence): 파일 또는 세그먼트에서 파생된 토큰의 순서 있는 목록.
    • 부분 시퀀스 (Subsequence): 전체 시퀀스 내에서 연속된 토큰의 하위 집합.

최소 토큰 시퀀스 (Minimum Token Sequence, MTS)최소 토큰 시퀀스 유닛 (Mimimum Token Sequence Unit, MTSU)

  • 정의:
    • 최소 토큰 시퀀스 (MTS): 고정 크기 토큰으로부터 원본 시퀀스의 기본 부분 시퀀스 단위.
    • 최소 토큰 시퀀스 유닛 (MTSU): 시스템 내에서 인덱싱, 후보 선정, 비교의 기본 단위.
  • 특징:
    • MTSUMTS를 해싱하여 계산됨.
    • MTS는 여러 토큰으로 구성되므로, 단일 토큰보다 MTS의 중복 가능성이 낮음.

토큰화된 파일 (Tokenized File)

  • 정의: 파일의 토큰화된 버전.
  • 특징:
    • 토크나이저에 의해 생성됨.
    • 다음의 쌍으로 구성된 시퀀스로 이루어짐:
      • 토큰의 인덱스
      • 원본 문자(문자열)

쿼리 (Query), 쿼리 요청 (Query Request), 및 쿼리 결과 (Query Result)

!!TODO: 후보 쿼리(Candidate Query)와 쿼리(Query)를 명확히 정의

  • 정의:
    • 쿼리 (Query): 타겟 내에서 공통 부분 시퀀스를 가진 소스의 후보 파일을 검색하는 과정.
    • 쿼리 요청 (Query Request): 타겟에서 발견된 특정 부분 시퀀스를 포함하는 소스 파일을 찾기 위해 사용되는 검색 매개변수의 집합.
    • 쿼리 결과 (Query Result): 쿼리의 출력으로, 타겟 파일과 후보 소스 파일 목록의 쌍.
  • 구성 요소:
    • 타겟 데이터셋 내의 모든 파일을 포함함.
    • 후보 쿼리를 사용하여 후보 소스 파일 및 관련 프로젝트 메타데이터를 검색함.
    • 타겟 파일 내의 어떤 부분 시퀀스와 일치하는 토큰 부분 시퀀스를 포함하는 소스 파일을 식별함.
  • 유형:
    • 정확한 쿼리 (Exact Query): 소스와 타겟 간에 정확히 동일한 부분 시퀀스를 검색함.
    • 유사한 쿼리 (Similar Query): 사전 정의된 유사성 매개변수에 기반하여 유사한 부분 시퀀스를 검색함.
  • 결과:
    • 소스 파일과 타겟 파일의 쌍: 소스 파일을 해당 타겟 파일과 연결함.
    • 부분 시퀀스 인덱스의 쌍: 소스 및 타겟 파일 모두에서 일치하는 부분 시퀀스의 시작 및 끝 인덱스를 나타냄.

후보 쿼리 (Candidate Query)

!!TODO: 후보 쿼리(Candidate Query)와 쿼리(Query)를 명확히 정의

  • 정의: 쿼리와 유사한 사전 검색 메커니즘으로, 소스에서 파일 목록만 반환함.
  • 특징:
    • 전체 소스 데이터셋에 대해 작동함.
    • 허위 긍정을 허용하지만 허위 부정을 허용하지 않음.
    • 유사한 쿼리를 직접 지원하지 않음.
      • 그러나 더 작은 MTS 크기를 사용하여 유사한 기능을 달성할 수 있음.

배치 쿼리 (Batch Query)

  • 정의: 효율성을 높이기 위해 여러 쿼리를 동시에 처리하는 방법.
  • 특징:
    • 단일 작업에서 2^16 ~ 2^24개의 MTS 배치 요청을 처리함.
    • 배치 쿼리를 실행하기 전에 키를 정렬하고 분할함.
    • RocksDB/LevelDB와 같은 데이터베이스의 MultiGet API를 사용하여 배치 쿼리 처리를 최적화함.

인덱스 (Index)

!!TODO: 인덱스(Index)와 후보 인덱스(Candidate Index)를 명확히 정의

  • 정의: 후보 쿼리에 의해 반환된 파일 목록으로부터 구축된 데이터 구조.
  • 특징:
    • 정확한 쿼리 및 유사한 쿼리에 기반한 상세 검색 작업을 최적화함.
    • 인덱서(Indexer)에 의해 생성되며 인덱싱 후에는 변경 불가능함.
    • SSD와 같은 저장 장치에서의 효율적인 읽기 작업을 처리할 수 있도록 설계됨.

후보 인덱스 (Candidate Index)

  • 정의: 전체 소스를 위한 초기 인덱싱.
  • 특징:
    • 파일 수준 목록을 제공하여 후보 쿼리를 지원함.
    • 쿼리 작업 중 잠재적 일치 파일에 대한 고속 접근을 용이하게 함.

파티셔닝 (Partitioning)

  • 정의: 쿼리 요청(Query Request) 내의 MTSU를 분할하여 **파인딩(Finding)**을 최적화하는 과정.
  • 특징:
    • **인덱스(Index)**는 MTSU의 순서에 따라 정렬됨.

파일 아카이버 (File Archiver)

  • 정의: **소스 파일(Source File)**의 파일 ID로부터 소스 파일을 반환함.
  • 특징:
    • 파일 ID를 기반으로 소스 파일을 효율적으로 검색하고 반환함.
    • 아카이브된 파일 데이터를 관리하고 유지함.

인덱서 (Indexer)

  • 정의: 소스 데이터셋으로부터 인덱스를 생성함.
  • 특징:
    • **소스 파일(Source Files)**을 처리함:
      • **소스 파일(Source Files)**으로부터 **토큰화된 파일(Tokenized Files)**을 생성함.
      • **토큰화된 파일(Tokenized Files)**과 소스 파일의 메타데이터로부터 MTSU와 메타데이터를 기반으로 **인덱스(Index)**를 생성함.

쿼리어 (Querier)

  • 정의: **타겟 파일(Target Files)**로부터 쿼리를 생성함.
  • 특징:
    • **타겟 파일(Target Files)**을 처리함:
      • **타겟 파일(Target Files)**으로부터 **토큰화된 파일(Tokenized Files)**을 생성함.
      • **토큰화된 파일(Tokenized Files)**의 MTSU로부터 쿼리 요청을 생성함.
        • MTSU 목록과 관련된 **타겟 파일(Target Files)**의 메타데이터.
        • 쿼리 작업에 최적화된 그룹화/중복 제거된 MTSU.

파인더 (Finder)

  • 정의: 쿼리 작업 중 후보 파일을 처리함.
  • 특징:
    • 쿼리 요청으로부터 각 MTSU에 대한 후보 파일 목록(또는 후보 파일 목록 ID)을 **인덱스(Index)**에서 가져옴.
    • 효율적인 후보 파일 검색을 지원함.

머저 (Merger)

  • 정의: 쿼리 결과를 기반으로 후보 파일 목록을 병합함.
  • 특징:
    • 쿼리 결과를 기반으로 후보 파일 목록을 병합함.
    • 쿼리 요청에 대한 최종 후보 파일 목록을 생성함.

해시 함수 (Hash Function)

  • 정의: 입력 데이터(MTS)를 고정 크기의 바이트 문자열(MTSU)로 변환하는 함수.
  • 특징:
    • 고속성과 효율성을 위해 비암호화 해시를 사용함.
    • FarmHash는 현재 MTS 키 생성을 위해 사용되는 비암호화 해시 함수의 예시임.
    • 해시 값의 균일한 분포를 보장하여 충돌을 최소화하고 인덱싱 성능을 최적화함.

언어 패밀리 (Language Family)

  • 정의: 실제 표현의 유사성에 기반하여 프로그래밍 언어를 그룹화한 것.
  • 특징:
    • 동일한 패밀리 내의 언어는 공통의 문법 구조를 공유하여 서로 다른 언어 간에도 동일한 토큰 시퀀스를 가능하게 함.
    • 한 언어는 여러 패밀리에 속할 수 있으며, 여러 그룹과 패턴을 공유하는 경우가 있음.
    • 언어별 특성을 기반으로 소스 데이터를 분할하여 검색 및 인덱싱을 최적화함.

파티셔닝 (Partitioning)

  • 정의: 데이터를 최적의 처리 및 쿼리를 위해 명확한 세그먼트로 나누는 과정.
  • 특징:
    • 언어 패밀리별로 데이터를 분할하여 토큰 시퀀스의 유사성을 활용함.
    • 각 파티션 내에서 검색 공간을 줄여 쿼리 성능을 향상시킴.
    • 인덱싱 및 검색 작업의 확장성과 효율성을 지원함.

파라미터 (Parameter)

  • 정의: 쿼리 작업을 정제하고 맞춤화하기 위해 사용자가 정의한 기준.
  • 유형:
    • 유사도 비율 (Similarity Rate): 유사한 쿼리에서 일치의 요구되는 유사성 정도를 지정함.
    • 검색 단위 (토큰 기준):
      • MTSU 크기 (MTSU Size):
        • 정의: 검색 과정 중 부분 시퀀스를 해싱하는 데 사용되는 최소 단위 크기.
      • 최소 검색 단위 크기 (Minimum Search Unit Size):
        • 정의: 검색을 수행할 때 고려되는 최소 단위 크기.

프로젝트 요구 사항 (Project Requirements)

  • MTS 제약사항:
    • MTS는 크기가 3 토큰 이하이어야 함.
    • MTS는 인덱싱에 64비트 해시를 사용하는 고정 크기 키로 표현됨.
  • 파일 사양:
    • 파일 크기는 X KB에서 X KB 범위 (정확한 범위는 명시 필요).
  • 인덱스 사양:
    • 인덱서는 인덱스를 생성하며, 이후에는 변경 불가능함.
    • 약 2^36개의 등록된 키를 처리하며, 균일한 분포를 가정함.
  • 파일 목록 표현:
    • Roaring Bitmap을 사용하여 관리되며, 크기는 몇 바이트에서 몇 킬로바이트까지 다양함.
  • 작업 처리:
    • 각 작업은 2^16에서 2^24개의 MTS 배치 요청을 관리함.
    • 검색 쿼리에서 허위 부정은 허용하지 않지만, 허위 긍정은 허용함.
    • 쿼리의 10%에서 90%는 유효한 파일 목록을 반환함.
  • 쿼리 최적화:
    • 배치 쿼리를 실행하기 전에 키를 정렬하고 분할함.
    • RocksDB/LevelDB의 MultiGet API와 같은 효율적인 데이터베이스 API를 활용하여 처리함.
  • 하드웨어 사양:
    • 단일 머신(가전 모델) 또는 최대 8대의 머신(SaaS 모델)에 배포 가능함.
    • 높은 동시성과 병렬 처리 요구 사항을 충족할 수 있도록 설계됨.

하드웨어 (Hardware)

  • 정의: 인덱싱 및 쿼리 작업을 실행하는 물리적 머신 및 인프라.
  • 특징:
    • 단일 머신: 모든 작업이 하나의 시스템 내에서 이루어지는 가전 모델에 적합함.
    • 분산 머신: SaaS 모델에 사용되어 더 큰 규모를 처리하고 확장성을 제공함.
    • SSD와 같은 저장 장치에서의 효율적인 데이터 접근을 최적화함.
    • 고성능 요구 사항을 충족하기 위해 다중 동시 및 병렬 처리 작업을 처리할 수 있음.

해싱 및 키 분포 (Hashing and Key Distribution)

  • 정의: 토큰을 고정 크기의 해시 값으로 변환하여 인덱스의 키로 사용하는 과정.
  • 특징:
    • 해시 함수의 특성상 키가 균일하게 분포됨을 가정함.
    • 키 분포의 국소성을 제거하여 인덱스 전반에 걸쳐 균형 잡힌 부하를 보장함.
    • 충돌을 최소화하여 인덱싱 및 검색 작업의 효율성을 향상시킴.

MultiGet API

  • 정의: RocksDB 및 LevelDB와 같은 데이터베이스에서 단일 작업으로 여러 키-값 쌍을 검색할 수 있는 API.
  • 특징:
    • 여러 MTS 키를 동시에 가져와 배치 쿼리 처리를 향상시킴.
    • 개별 쿼리 수를 줄여 전반적인 검색 성능을 개선함.
    • 대량 작업을 위한 기본 데이터베이스 최적화를 활용하여 데이터 검색을 최적화함.

허위 긍정 및 허위 부정 (False Positives and False Negatives)

  • 허위 긍정 (False Positive):
    • 정의: 문서가 공통 토큰을 포함하지 않는데도 포함된 것으로 잘못 표시되는 경우.
    • 허용 여부: 성능과 속도를 향상시키기 위해 시스템 내에서 허용됨.
  • 허위 부정 (False Negative):
    • 정의: 문서가 실제로 공통 토큰을 포함하고 있음에도 불구하고 이를 식별하지 못하는 경우.
    • 허용 여부: 허용되지 않으며, 시스템은 모든 관련 문서가 검색되도록 보장해야 함.

로어링 비트맵 (Roaring Bitmap)

  • 정의: 정수 집합을 효율적으로 표현하고 조작하기 위해 사용되는 압축된 비트맵 형식.
  • 특징:
    • 빠른 비트 연산과 효율적인 저장을 제공함.
    • 일반적으로 몇 바이트에서 몇 킬로바이트 크기를 가짐.
    • 각 인덱스 키와 연관된 파일 목록을 표현하는 데 이상적이며, 빠른 쿼리 응답을 가능하게 함.

배치 처리 (Batch Processing)

  • 정의: 여러 쿼리나 작업을 동시에 처리하여 효율성을 높이고 처리 시간을 줄이는 방법.
  • 특징:
    • 단일 배치에서 대량의 MTS 요청을 관리함.
    • 정렬되고 분할된 키를 활용하여 데이터 검색을 최적화함.
    • 관련 작업을 그룹화하여 개별 쿼리 처리와 관련된 오버헤드를 줄임.

언어별 토큰화 (Language-Specific Tokenization)

  • 정의: 특정 언어의 문법 및 구문 규칙에 따라 텍스트를 토큰으로 분해하는 과정.
  • 특징:
    • 각 언어는 텍스트를 정확히 파싱하고 토큰화하기 위해 전문 토크나이저가 필요함.
    • 토큰 시퀀스가 각 언어의 문맥 내에서 일관되고 의미 있게 유지됨을 보장함.
    • 다양한 언어 데이터셋 간의 토큰 기반 검색의 무결성을 유지하는 데 중요함.

SSD 최적화 (SSD Optimization)

  • 정의: 데이터 접근 작업 중 SSD(Solid State Drive)의 성능을 극대화하기 위해 사용되는 기술과 전략.
  • 특징:
    • 읽기 및 쓰기 작업의 지연 시간을 최소화하고 처리량을 극대화함.
    • 인덱싱된 데이터에 대한 효율적인 접근을 보장하여 전체 쿼리 응답 시간을 줄임.
    • 빈번하고 빠른 데이터 접근이 요구되는 대규모 데이터셋을 처리하는 데 필수적임.

균일 키 분포 (Uniform Key Distribution)

  • 정의: 인덱스 전체 키 공간에 걸쳐 해시 키가 고르게 분포되어 클러스터링과 핫스팟을 방지함.
  • 특징:
    • FarmHash와 같은 고품질 해시 함수를 사용하여 달성됨.
    • 인덱싱 구조 전반에 걸쳐 부하를 균형 있게 분산시켜 성능과 확장성을 향상시킴.
    • 일관된 쿼리 응답 시간을 유지하고 성능 병목 현상을 방지하는 데 중요함.

이 확장된 글로서리는 원래의 정의와 기본 데이터에서 도입된 추가 개념을 모두 포함합니다. 데이터 구조, 처리 방법, 프로젝트 특정 요구 사항 등 시스템의 핵심 구성 요소를 다루어, 관련 용어와 아키텍처를 이해하는 데 필요한 포괄적인 참조 자료를 제공합니다.