11. 1프로젝트 소개
파일이 아무리 많아도
[파일처리]lab06.doc 운영체제 과제.doc 데이터베이스 중간 발표.ppt 인가탐1.doc 데이터베이스 보고서.doc
+
실습, 2015, 학교
파일처리
+
과제, 2014, 학교
운영체제
+
발표, 2015, 학교
데이터베이스, 중간
+
보고서, 2013, 학교
+
보고서, 2015, 학교
데이터베이스, 중간
12. 1프로젝트 소개
파일이 아무리 많아도
[파일처리]lab06.doc 운영체제 과제.doc 데이터베이스 중간 발표.ppt 인가탐1.doc 데이터베이스 보고서.doc
+
실습, 2015, 학교
파일처리
+
과제, 2014, 학교
운영체제
+
발표, 2015, 학교
데이터베이스, 중간
+
보고서, 2013, 학교
+
보고서, 2015, 학교
데이터베이스, 중간
연관 단어들로만 검색하면 찾을 수 있다.
23. 3
왜 N:M 을 직접 연결하지 않았나?
id name
1 a.txt
2 b.txt
3 c.txt
Storage_file
id File_id name
1 1 학교
2 1 과제
3 2 2015
4 2 학교
5 3 파일처리
tags
파일 및 태그 관련 테이블
24. 3
왜 N:M 을 직접 연결하지 않았나?
id name
1 a.txt
2 b.txt
3 c.txt
Storage_file
id File_id name
1 1 학교
2 1 과제
3 2 2015
4 2 학교
5 3 파일처리
tags
같은 태그명이 중복!
파일 및 태그 관련 테이블
25. 3
참조 테이블을 통한 중복 제거
id name
1 a.txt
2 b.txt
3 c.txt
Storage_file
id name
1 학교
2 과제
3 2015
4 파일처리
tags
File_id Tag_id
1 1
1 2
1 3
2 1
2 4
파일 및 태그 관련 테이블
26. 3
참조 테이블을 통한 중복 제거
id name
1 a.txt
2 b.txt
3 c.txt
Storage_file
id name
1 학교
2 과제
3 2015
4 파일처리
tags
File_id Tag_id
1 1
1 2
1 3
2 1
2 4
파일 및 태그 관련 테이블
27. 3
태그 수정은 삭제/추가 연산으로
id name
1 a.txt
2 b.txt
3 c.txt
Storage_file
id name
1 학교
2 과제
3 2015
4 파일처리
tags
File_id Tag_id
1 1
1 2
1 3
2 1
2 4
a.txt 의 학교 태그를 파일처리로 수정하고 싶다.
파일 및 태그 관련 테이블
28. 3
태그 수정은 삭제/추가 연산으로
id name
1 a.txt
2 b.txt
3 c.txt
Storage_file
id name
1 학교
2 과제
3 2015
4 파일처리
tags
File_id Tag_id
1 1
1 2
1 3
2 1
2 4
1 4
File_id : 1 – Tag_id : 1 인 row를 지우고,
File_id : 1 – Tag_id : 4 row 를 추가
파일 및 태그 관련 테이블
29. 3파일 업로드
파일을 업로드 하는 작업은 2개 작업이 복합되어있다.
과제, 2015, 학교
[파일처리]lab06.doc
30. 3파일 업로드
두 작업 중 하나라도 실패시 전체작업이 실패
과제, 2015, 학교
[파일처리]lab06.doc
42. 3태그를 이용한 검색
사용자가 입력한 태그가 실제 시스템에 없을 수 있다.
tag
2015
DB
발표자료
id name
1 2015
2 과제
3 DB
사용자가 입력한 태그 실제 시스템의 태그 테이블
43. 3태그를 이용한 검색
검색 절차
1. 사용자가 입력한 태그에 해당하는 태그 ID 목록 조회
2. 검색을 요청한 사용자 소유의 파일이면서,
(1)에서 조회한 태그들을 1개 이상 가진 파일 조회
3. 사용자가 입력한 태그 수 대비 (2)의 파일 각각이 가진 태그들의
매칭률 계산
4. 매칭률로 결과를 내림차순 정렬
44. 3태그를 이용한 검색
검색 구현 중점 사항
1. 각 단계 별 결과를 어플리케이션까지 가져오지 않는다.
-> 연결 세션에 한정적인 메모리엔진기반 임시 테이블 생성
2. 최소의 쿼리를 이용하여 검색을 수행하자
3. 결과는 정확해야한다
45. 3태그를 이용한 검색 - SQL
절차 1. 사용자가 입력한 태그에 해당하는 태그 ID 목록 조회
create TEMPORARY table ttags ENGINE=MEMORY
as (select id from eztags where name in (tags))
46. 3태그를 이용한 검색 - SQL
절차 2. 검색을 요청한 사용자 소유의 파일이면서, (1)에서 조회한 태그들을
1개 이상 가진 파일 조회
create TEMPORARY table files ENGINE=MEMORY
as (select distinct storage_file_id from eztags_has_storage_file
where tags_id in (select id from ttags) and user_id= ?)
47. 3태그를 이용한 검색 - SQL
절차 3. 사용자가 입력한 태그 수 대비 (2)의 파일 각각이 가진 태그들의
매칭률 계산
tag
2015
DB
발표자료
name
2015
과제
DB
사용자가 입력한 태그파일이 가진 태그
차집합
name
2015
DB
매칭되는 태그
48. 3태그를 이용한 검색 - SQL
절차 3. 사용자가 입력한 태그 수 대비 (2)의 파일 각각이 가진 태그들의
매칭률 계산
매칭되는 태그 갯수
X 100 = 매칭률
전체 입력 태그 갯수
49. 3태그를 이용한 검색 - SQL
절차 3. 사용자가 입력한 태그 수 대비 (2)의 파일 각각이 가진 태그들의
매칭률 계산
select tmp.storage_file_id, ef.name, ft.value from
(select storage_file_id from ttags left join eztags_has_storage_file f on id =
f.tags_id where f.storage_file_id=?) as tmp join ezstorage_file as ef
on tmp.storage_file_id = ef.id join ezfile_type as ft on ef.type_id = ft.id
50. 3태그를 이용한 검색 - SQL
절차 3. 사용자가 입력한 태그 수 대비 (2)의 파일 각각이 가진 태그들의
매칭률 계산
select tmp.storage_file_id, ef.name, ft.value from
(select storage_file_id from ttags left join eztags_has_storage_file f on id =
f.tags_id where f.storage_file_id=?) as tmp join ezstorage_file as ef
on tmp.storage_file_id = ef.id join ezfile_type as ft on ef.type_id = ft.id
3중 조인....
51. 3카테고리를 이용한 검색
1학년 포트폴리오
2011년 과제 보고서 발표자료
카테고리의 태그가 실제 시스템에 없을 수 있다.
하지만 실제 존재하는 태그에 대해서는 파일이 모두 가지고 있어야한다.
52. 3카테고리를 이용한 검색
검색 절차
1. 카테고리가 가진 태그 중, 실제 존재하는 태그이면서 사용자가
보유한 파일들에 포함되는 태그 ID 목록 조회
2. (1)에서 조회한 태그들을 1개 이상 가진 파일 조회
3. 사용자가 입력한 태그 수 대비 (2)의 파일 각각이 가진 태그들의
매칭률 계산
4. 매칭률이 100%인 파일을 필터링
53. 3카테고리를 이용한 검색
절차 1. 카테고리가 가진 태그 중, 실제 존재하는 태그이면서 사용자가
보유한 파일들에 포함되는 태그 ID 목록 조회
create TEMPORARY table ttags ENGINE=MEMORY
as (select distinct ec.tags_id as id from eztags_has_categories ec join
eztags_has_storage_file ef on (ec.tags_id = ef.tags_id)
where ec.categories_id = ? and ef.user_id = ?)
56. 4한계점
(1)쿼리 성능 평가 미진행
-> 생각보다 join이 많이 발생하였다.
-> (시간상) 대량의 데이터에 대한 성능 평가를 진행하지 못함
(2) 검색의 결과에 대한 Paging 을 고려하지 않음
-> 매칭률을 계산하기 위해서는 전체를 상대로 검색해야한다
-> 전체를 검색하되 Paging 을 어떻게 지원할까?