오늘은 EPL 리그 성적 업데이트를 하는 것 만들었습니다.
간단한 API를 만들 때 플로우나 어떤 데이터를 가지고 가공을 해야하는지 정리해두고 하는게 일을 효과적으로 빠르게 처리할 수 있습니다. (개인적인 생각)
목적
- 크롤링 해온 데이터와 기존의 DB 정보에서 오늘 진행한 경기가 끝날 때마다
(스케줄러{현재 - 24:00 기준으로 진행중}) 클럽별 총 전적을 업데이트함.
PremierLeaugeData : EPL 리그에 대한 상세 내용이 기재되어 있는 사이트에서 데이터를 크롤링해서 필요한 정보만 가져옵니다.
DatabaseData : 데이터베이스 내에 업데이트 되어야하는 테이블에서 기본키값과 클럽ID, 클럽명(LEFT JOIN 클럽) 을 가져옵니다.
let query = "INSERT INTO [테이블 명] [컬럼들]... VALUES";
for (const [index, premierLeagueData] of premierLeagueList.entries()) {
for (const clubData of clubList) {
if (clubData.club_name.includes(premierLeagueData.team)) {
query += `(${clubData.participating_club_id}, ${premierLeagueData.ranking}, ${premierLeagueData.totalMatches}, ${premierLeagueData.win}, ${premierLeagueData.draw}, ${premierLeagueData.lose}, ${premierLeagueData.score}, ${premierLeagueData.conceded}, ${premierLeagueData.gainLossDifference}, ${premierLeagueData.point}, "${premierLeagueData.last5Matches}")`;
// 구분을 해주지 않으면 구문 에러가 납니다!!
if (index + 1 !== premierLeagueList.length) {
query += ',';
}
}
}
query += ` ON DUPLICATE KEY UPDATE
ranking = VALUES(ranking) ...
return query;
Q) 데이터 가공되어질 때마다 query를 DB에 보내면 되지 않나요?
A) 저는 데이터베이스 연결을 요청하는 작업이 많은 자원을 소모하기 떄문에, 한번에 query를 만들어서 보내는게 좋다고 생각했습니다.
Q) INSERT INTO ... ON DUPLICATE KEY UPDATE 가 아니라 UPDATE 구문을 사용해도 되는 것 아닌가요?
A) 저도 성능을 직접 측정해보지 않아서 정확하게는 모르겠습니다. 추후에 정리한 뒤 어떤 것이 더 효율적인지 비교하려고합니다.
'개발일지 > 설계' 카테고리의 다른 글
[Node.js] 채팅 설계 Q&A (2) | 2024.02.14 |
---|