[Tip] SQLite Full Text, Multi thread programming

Thread를 Kill로 죽인다는 이상한 소리 하는 사람 있으면 찾아가서 혼내줄꺼다.

Run Loop을 자연스럽게 빠져나오게 프로그래밍 해야지…

회사에서 있던 이야기인데

SQLite에서 Full Text Search를 만들어야 했다. row가 10만건 이상 일 때는 대략 18초 정도 걸린다.

FTS3, 4 색인 사용 안하고 LIKE ‘%keyword%’ 를 이용 해야 한다. 순간 DB Read에서 스레드를 최대 18초 정도 잡고 있을 수 있다.

중간에 검색을 중단 하려면 partial search해서 DB를 오래 점유하는 것을 막고 검색 while loop에서 escape 할 수 있도록 해야 한다.

연차 많으신 분 왈….한번에 다 던지고 결과를 받으면 안되냐고, 중간에 검색 중지 하고 싶으면 관련 스레드를 죽이라는데 안된다고 답변함.

이해를 돕기 위해 슈도코드로 써보면 다음과 같다.

DB에서 18초 정도를 잡고 있는데 이걸 Thread kill로 죽인다고 정상 종료 보장 되지 않는다.

모를 수 있다고 생각 하고 넘어갔는데 정말로 kill을 생각 한건 아니겠지…


    while(true) {
        results = db.searchKeyword(keyword, pk_begin, pk_end); // partial search
        if (results.empty) break;
        // delegate search results to other threads like UI(Main thread)
        if (paused) break; 
        pk_begin = pk_end + 1;
        pk_end = pk_begin + window_size - 1;
    }

광고

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중