Skip to content

alirz-pixel/auto_complelete

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mock 데이터 fetch**
(데이터 출처: 우리말샘 사전)

데이터의 개수: 1190944
DB fetchall: 0.9초 (word와 id 값만 select)
메모리 사용량: 692 MB

Trie 구축 후

총 노드의 개수: 2378541 (word가 쪼개져서 들어갔으므로, 노드의 개수는 증가)

노드 insert 시간: 6.08초 (DB 시간 제외)
노드 search 시간: 평균 0.002초 (insert 시간 제외, 최대 0.03초)
메모리 사용량: 1.559 GB (DB 데이터 제외, 최대 1.728 GB)
-> 일단 메모리로 전부 올릴 필요가 있나 싶지만, 그렇게 진행해보고
==> 단순한 트라이 만으로는 자동완성을 케어할 수 없음

Compreesed Trie 구축 후
(데이터 특성에 따라서 메모리 압축률의 차이가 있음, split이 많이 일어나면 효율성이 떨어짐)
압축률이 높게 나타나는 경우

  1. 단어의 길이가 고르지 않음. (긴 단어는 한 노드 안에 많은 글자 포함될 것임)
  2. 각 단어들의 prefix가 많이 겹침

총 노드의 개수: 968092 (prefix가 중복될 경우, 새로운 노드를 생성하지 않기 떄문에 전체 데이터셋 보다는 작아짐)
노드 insert 시간: 1분 16초 (DB 시간 제외)
노드 search 시간: 평균 0.003초? (insert 시간 제외, 최대 0.02초)
메모리 사용량: 662 MB (DB 데이터 제외, 최대 831 MB)
==> 여러 글자가 한 노드에 포함되는 케이스 덕분에 Trie보다 최대 2.6배 정도 메모리 압축이 된 것을 확인할 수 있음
==> 트리의 depth 자체는 줄었지만, 문자열을 비교하는 부분 떄문에 속도에선 큰 차이가 없음

TODO

  • prefix matching시 고려할 점들
    • suffix도 검색되도록 하기 (ex: query=완성, result:자동완성)

About

자동 완성 및 최적화 프로젝트 (using compressed trie)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors