#8
DB에서 많은 양의 데이터를 핸들링할 때 어떤식으로 테이블을 인덱싱하고 서버 로직을 설계해야 실제로 사용할 수 있는 앱을 만들 수 있을지 고민하고 알아보기 위해서 도서 정보를 1500만건 넘게 로컬 환경의 MySQL에 때려박는 작업을 진행했다
idb 파일이 있었으면 금방 끝났겠지만 그런게 없었기 때문에 필요없는 데이터는 정제도 할겸 API로 받아오거나 csv, excel 파일로 넣을까 고민했는데, API의 경우는 1000만건을 넘는데 각각의 트래픽 제한으로 시간이 너무 오래걸리거나 하는 경우가 많아 제외하고 문서 파일을 받아 직접 넣는 방식으로 진행했다
그냥 노가다라서 딱히 힘든 점은 없었는데 excel column을 읽어들이는 과정에서 null 값 처리는 되는데 이놈이 null값 처리를 잘 했으면 반복문에서 다음으로 넘어간 뒤 나머지를 DB 컬럼에 잘 박아넣어야 하는데 null값 처리했다고 무슨 ACID 원칙이 깨진것마냥 전부 롤백을 때려버려서 null값이 하나라도 있으면 업로드 작업은 성공했다는데 막상 DB에는 안박히는 문제 때문에 조금 골치를 썩힌 것 빼고는 없었다
데이터를 대략 1630만건 정도 넣어놓고 FullText Scan 방식을 사용하기 위해 인덱싱 하는데 1630만건이나 인덱싱하려니 시간이 기존에 설정해둔 커넥션 리미트 타임을 60초를 가뿐히 넘겨버려서 (500초 넘게 걸렸다) 이상한 더미 인덱싱 파일이 생겨서 안지워져 애먹었다
어차피 디비로퍼 기준으로 설치 되있어서 버퍼 사이즈 설정이 애매했던 지라 오히려 잘됬어 ㅋ 하고 서버용 프로필로 재설정 할겸 재설치 한 뒤 Fulltext 인덱싱 작업들을 완료했다
(기존의 데이터는 idb 파일로 백업해 바로 업로드했다)
전문검색 스캔을 하니 페이저 검색 속도가 어마어마하게 빨라져서 0.005초 미만이 되어버렸기 때문에 사실상 체감할 수 있는 영역을 넘어서 버렸다
검색 옵션을 세분화할 겸 프론트 부분을 설계중인데 SEQ 문법 오류가 터지는데 명령어 부분을 예약어나 ""에 넣어서 줘서 문제인 것 같은데 해결 중이다